51NOD 1083 矩阵取数问题
Posted sortmin
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了51NOD 1083 矩阵取数问题相关的知识,希望对你有一定的参考价值。
基准时间限制:1 秒 空间限制:131072 KB 分值: 5 难度:1级算法题
一个N*N矩阵中有不同的正整数,经过这个格子,就能获得相应价值的奖励,从左上走到右下,只能向下向右走,求能够获得的最大价值。
例如:3 * 3的方格。
1 3 3
2 1 3
2 2 1
能够获得的最大价值为:11。
Input
第1行:N,N为矩阵的大小。(2 <= N <= 500) 第2 - N + 1行:每行N个数,中间用空格隔开,对应格子中奖励的价值。(1 <= N[i] <= 10000)
Output
输出能够获得的最大价值。
Input示例
3 1 3 3 2 1 3 2 2 1
Output示例
11
题解:简单DP问题,因为只能往下或右走,所以DP方程为dp[i][j]=max(dp[i-1][j]+dp[i][j],dp[i][j-1]+dp[i][j]),输出dp[n][n]即可。
AC代码:
1 #include<iostream> 2 using namespace std; 3 const int maxn = 505; 4 int dp[maxn][maxn]; 5 int n; 6 int main() 7 { 8 cin>>n; 9 for(int i=1;i<=n;i++) 10 { 11 for(int j=1;j<=n;j++) 12 { 13 cin>>dp[i][j]; 14 } 15 } 16 for(int i=1;i<=n;i++) 17 { 18 for(int j=1;j<=n;j++) 19 { 20 dp[i][j]=max(dp[i-1][j]+dp[i][j],dp[i][j-1]+dp[i][j]); 21 } 22 } 23 cout<<dp[n][n]<<endl; 24 return 0; 25 }
以上是关于51NOD 1083 矩阵取数问题的主要内容,如果未能解决你的问题,请参考以下文章