矩阵取数
来源:互联网 发布:java ireport案例 编辑:程序博客网 时间:2024/06/05 02:34
链接:https://www.51nod.com/onlineJudge/questionCode.html#!problemId=1083
题意:一个N*N矩阵中有不同的正整数,经过这个格子,就能获得相应价值的奖励,从左上走到右下,只能向下向右走,求能够获得的最大价值。
思路:我们可以发现:到第一行或者第一列的最大值为它的上一个的值加上本身即:
dp[i][j] = dp[i][j-1] + juz[i][j]; //第一行的每一个的值dp[i][j] = dp[i-1][j] + juz[i][j]; //第一列的每一个的值
当然初始值为除了第一个是矩阵的值外其余的都是0,非第一行或者第一列的值为它的上一个与左边那个的最大值加上本身即:
dp[i][j] = max(dp[i-1][j] , dp[i][j-1])+juz[i][j];
代码:
#include <iostream>#include <cstdio>#include <cstring>#include <cmath>#include <algorithm>using namespace std;int juz[550][550];long long dp[550][550];int main(){ int n; while(~scanf("%d",&n)) { for(int i=0; i<n; i++) { memset(dp, 0 ,sizeof dp); for(int j=0; j<n; j++) { cin >> juz[i][j]; } } dp[0][0] = juz[0][0]; for(int i=0; i<n; i++) { for(int j=0; j<n; j++) { if(i == 0 && j == 0) continue; if(i == 0) dp[i][j] = dp[i][j-1]+juz[i][j]; else if(j == 0) dp[i][j] = dp[i-1][j] + juz[i][j]; else { dp[i][j] = max(dp[i-1][j],dp[i][j-1])+juz[i][j]; } } } cout << dp[n-1][n-1] << endl; } return 0;}
0 0
- noip2007 矩阵取数
- 矩阵取数游戏
- 矩阵取数游戏
- 矩阵取数
- 矩阵取数游戏
- 矩阵取数游戏
- 矩阵取数问题
- 矩阵取数
- 矩阵取数
- P1005矩阵取数
- 矩阵取数问题
- 矩阵取数
- 矩阵取数问题
- 矩阵取数问题
- 矩阵取数问题
- 矩阵取数游戏
- codevs1166 矩阵取数游戏
- 1083 矩阵取数问题
- 杭电1020 之 Encoding
- Python小技巧:使用*解包和itertools.product()求笛卡尔积
- swift3.0三种反向传值
- 输入两个链表,找出他们第一个公共节点
- Vim十大必备插件
- 矩阵取数
- 12款最佳的Linux命令行终端工具
- SpringMVC提高篇(四):从Servlet到DispatcherServlet源码分析
- 初识.net界面程序(5)——定时器和随机数练习
- cut
- Oracle体系结构详细图解
- 微信APP支付服务端(JAVA)
- Eclipse上安装GIT插件EGit及使用
- oschina git 提交项目