【动态规划】数字三角形模型:摘花生_ci

当前所在坐标为(x,y),只能由(x-1,y)或(x,y-1)走过来。

由于取最大值,所以当前位置一定要拿。

设dp[x][y]表示从起点走到(x,y)的最大值,那么dp[x][y]=max(dp[x-1][y],dp[x][y-1])+G[X][Y];

初始化一行(一列):dp[i][0]=dp[i-1][0]+G[i][0] dp[0][j]=dp[0][j-1]+G[0][j]

#include<iostream>
using namespace std;
int grid[101][101];
int dp[101][101];
int r,c,m;
int main(){
    cin>>m;
    for(int k=0;k<m;k++){
      cin>>r>>c;
      for(int i=0;i<r;i++){
          for(int j=0;j<c;j++)
          cin>>grid[i][j];
      }
      dp[0][0]=grid[0][0];
      for(int i=1;i<r;i++){
          dp[i][0]=dp[i-1][0]+grid[i][0];
      }
      for(int j=1;j<c;j++){
          dp[0][j]=dp[0][j-1]+grid[0][j];
      }
      for(int i=1;i<r;i++){
          for(int j=1;j<c;j++){
              dp[i][j]=max(dp[i-1][j],dp[i][j-1])+grid[i][j];
          }
      }
      cout<<dp[r-1][c-1]<<endl;
      
    }
    return 0;

}