C++ 二维线性DP

二维线性DP 框架代码见下

cpp 复制代码
#include <iostream>
using namespace std;

#define maxn 110

int mat[maxn][maxn];
int dp[maxn][maxn];

int main()
{
  int n;
  cin >> n;
  for(int i=0; i<n; ++i){
    for(int j=0; j<=i; ++j){
      cin >> mat[i][j];
    }
  }
  dp[0][0] = mat[0][0];
  for(int i=0; i<n; ++i){
    dp[i][i] = mat[i][i] + dp[i-1][i-1];
    dp[i][0] = mat[i][0] + dp[i-1][0];
    for(int j=1; j<i; ++j){
      dp[i][j] = mat[i][j] + max(dp[i-1][j-1], dp[i-1][j]);
    }
  }
  int ans = dp[n-1][0];
  for(int i=1; i<n; ++i){
    ans = max(ans, dp[n-1][i]);
  }
  cout << ans << endl;
  // 请在此输入您的代码
  return 0;
}

代码练习1 对应蓝桥云课 云神的路径 代码见下

cpp 复制代码
#include <iostream>
using namespace std;

#define mod 1000000007
#define maxn 1001
char s[maxn][maxn];
int dp[maxn][maxn];


int main()
{
  int n;
  cin >> n;

  for(int i=0; i<n; ++i){
    cin >> s[i];
  }

  for(int i=0; i<n; ++i){
    for(int j=0; j<n; ++j){
      if(s[i][j] == '*'){
        dp[i][j] = 0;
      }else{
        if(i==0 && j ==0){
          dp[i][j] = 1;
        }else if(i == 0){ // 从左边过来
          dp[i][j] = dp[i][j-1];
        }else if(j == 0){ // 从上边过来
          dp[i][j] = dp[i-1][j];
        }else{
          dp[i][j] = (dp[i][j-1]+dp[i-1][j]) % mod;
        }
      }
    }
  }
  cout << dp[n-1][n-1] << endl;
  // 请在此输入您的代码
  return 0;
}

代码 2 对应蓝桥云课 激光样式 代码见下

cpp 复制代码
#include <iostream>
using namespace std;

int dp[31][2];

int main()
{
  dp[1][0] = 1;
  dp[1][1] = 1;
  for(int i=2; i<=30; ++i){
    dp[i][0] = dp[i-1][0] + dp[i-1][1];
    dp[i][1] = dp[i-1][0];

  }
  cout << dp[30][0] + dp[30][1] << endl;
  // 请在此输入您的代码
  return 0;
}
相关推荐
aqiu1111118 小时前
【LeetCode 902】最大为 N 的数字组合 - 详细题解与数位组合思路
数据结构·算法·leetcode·蓝桥杯·数位dp
辰烨chenye9 小时前
LeetCode Hot 100 题解 · 哈希篇
算法·leetcode·哈希算法
罗西的思考10 小时前
DreamZero 与 DreamDojo:世界模型与策略的分层协同综合分析与对比
人工智能·算法·机器学习
鱼子星_10 小时前
【C++】继承和多态(上)
c++·笔记
玖玥拾10 小时前
LeetCode 219 存在重复元素 II
算法·leetcode·哈希算法·散列表
知无不研11 小时前
c语言中循环的介绍与简单应用
c语言·开发语言·算法·循环·for·while
郝学胜-神的一滴11 小时前
Qt 高级编程 045:坐标体系深度实战
开发语言·c++·windows·python·qt·程序人生
码匠许师傅11 小时前
【设计模式精讲】22.中介者模式(Mediator)
c++·设计模式·软件工程·uml·中介者模式
a1879272183112 小时前
【算法】动态规划第四篇:背包收官——min 哨兵、计数世界与组合排列分水岭
算法·leetcode·动态规划·dp·01背包·算法讲解·决策合并