51nod动态规划-----矩阵取数
2016-03-21 19:57
393 查看
一个N*N矩阵中有不同的正整数,经过这个格子,就能获得相应价值的奖励,从左上走到右下,只能向下向右走,求能够获得的最大价值。
例如:3 * 3的方格。
1 3 3
2 1 3
2 2 1
能够获得的最大价值为:11。
Input
OutPut
Input示例
Output示例
状态转移方程:f(i,j) = max{f(i+1,j),f(i,j+1)|i<N,j<N}+A[i][j];
例如: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
状态转移方程:f(i,j) = max{f(i+1,j),f(i,j+1)|i<N,j<N}+A[i][j];
#include<stdio.h> #include<iostream> #include<algorithm> using namespace std; int main(){ //freopen("C://Users//Administrator//Desktop//duipai2//1.txt","r",stdin); //freopen("C://Users//Administrator//Desktop//duipai2//out1.txt","w",stdout); int N,i,j; while(~scanf("%d",&N)){ int map[505][505]; for(i=0;i<N;i++) for(j=0;j<N;j++) scanf("%d",&map[i][j]); int dp[505][505]={0};//不知道为什么这个不能跟前面的map一起定义。。。 for(i=0;i<N;i++) for(j=0;j<N;j++) dp[i][j]=max(dp[i-1][j],dp[i][j-1])+map[i][j]; printf("%d\n",dp[N-1][N-1]); } return 0; }
相关文章推荐
- python学习笔记(第二章,快速入门)
- Wu-Manber实现
- 2523: 建房工程
- 在安装twincat plc时,出现 there are some files marked for deletion on next reboot.please reboot first then
- java语言程序设计第十版(Introduce to java) 课后习题 chapter6-25
- 利用堆栈实现四则表达式运算器
- 2016SDAU课程练习一1007
- Android热补丁技术—dexposed原理简析(手机淘宝采用方案)
- Android热补丁技术—dexposed原理简析(手机淘宝采用方案)
- Android学习之仿QQ讨论组和微信群聊头像
- Android热补丁技术—dexposed原理简析(手机淘宝采用方案)
- Tarjan求强连通分量
- 2013 C#单元测试
- [置顶] Android 5.1 open data flow 数据开启流程
- fatal error LNK1201:写入程序数据库“***.pdb”时出错;请检查是否是磁盘空间不足、路径无效或权限不够
- ansible 好文收集
- linux chmod命令
- MySQL修改root密码的4种方法
- ARM的六大类指令集--- 加载/存储指令
- Android 5.1 open data flow 数据开启流程