[2016-05-10][51nod][1083 矩阵取数问题]

  • 时间:2016-05-10 10:02:33 星期二

  • 题目编号:[2016-05-10][51][]

  • 题目大意:

    • 一个N*N矩阵中有不同的正整数,经过这个格子,就能获得相应价值的奖励,从左上走到右下,只能向下向右走,求能够获得的最大价值。
  • 分析:动态规划,dp

    • dp[i][j] 表示到达 (i,j)处的最大值
    • dp[i][j] = max(dp[i - 1][j] , dp[i][j - 1]) + a[i][j]
  1. #include<stdio.h>
  2. #include<algorithm>
  3. using namespace std;
  4. const int maxn = 5 * 1E2 + 10;
  5. int a[maxn][maxn],dp[maxn][maxn];
  6. int main(){
  7. int n;
  8. scanf("%d",&n);
  9. for(int i = 1 ; i <= n ; ++i){
  10. for(int j = 1 ; j <= n ; ++j){
  11. scanf("%d",&a[i][j]);
  12. }
  13. }
  14. for(int i = 1 ; i <= n ; ++i){
  15. for(int j = 1 ; j <= n ; ++j){
  16. dp[i][j] = max(dp[i - 1][j],dp[i][j - 1]) + a[i][j];
  17. }
  18. }
  19. printf("%d\n",dp[n][n]);
  20. return 0;
  21. }


来自为知笔记(Wiz)


posted on 2016-05-10 10:05  红洋  阅读(137)  评论(0编辑  收藏  举报

导航