0
点赞
收藏
分享

微信扫一扫

51Nod1083 矩阵取数问题(动态规划)


 思路就是动态规划。dp[i][j]表示(0,0)到(i,j)的最大价值。可以思考一下,dp[i][j]的值取决于谁。因为只能向下向右走,所以它的值取决于它的上面和左面的dp值,so,

dp[i][j]=max(dp[i-1][j],dp[i][j-1])+map[i][j]

#include<iostream>
#include<cstring>
#include<algorithm>
using namespace std;
int dp[505][505];
int map[505][505];
int main()
{
int n;
cin>>n;
memset(dp,0,sizeof(0));
for(int i=0;i<n;i++)
for(int j=0;j<n;j++)
cin>>map[i][j];
dp[0][0]=map[0][0];
for(int i=1;i<n;i++)
dp[i][0]+=dp[i-1][0]+map[i][0];
for(int i=1;i<n;i++)
dp[0][i]+=dp[0][i-1]+map[0][i];
for(int i=1;i<n;i++)
for(int j=1;j<n;j++)
dp[i][j]+=max(dp[i-1][j],dp[i][j-1])+map[i][j];
cout<<dp[n-1][n-1]<<endl;
return 0;
}

 

举报

相关推荐

0 条评论