【矩阵取数】SDUT 3773 数字矩阵
来源:互联网 发布:端口查看 编辑:程序博客网 时间:2024/06/05 00:11
数字矩阵
Time Limit: 1000MS Memory Limit: 65536KB
Problem Description
bLue 站在了一个 n*m 的填有数字的矩阵中,他可以选择从矩阵的四个顶点之一出发,到达斜对面的顶点。每一步必须向靠近目的地的方向移动,且每次移动都可以累加所在位置上的数字。
例如,bLue 选择从左上角出发,那么目的地为右下角,则他每次只能向右或向下移动一格。
现在他想知道在所有的走法中,能获得的最大累加和是多少。你能帮助他吗?
Input
输入数据有多组(数据组数不超过 50),到 EOF 结束。
对于每组数据:
第 1 行输入 2 个整数 n, m (1 <= n, m <= 100),表示矩阵的行数和列数。
接下来 n 行,每行包含 m 个用空格隔开的整数 aij (0 <= aij <= 10000),表示这个数字矩阵。
Output
对于每组数据,输出 1 行,包含 1 个整数,表示 bLue 能获得的最大的累加和。
Example Input
3 4
1 2 3 4
1 0 6 5
4 7 2 0
Example Output
28
代码:因为左上角到右下角和右下角到左上角的结果一样, 所以只需要求出左上角到右下角的最大累积和,和右上角到左下角的最大累积和即可
#include<stdio.h>#include<string.h>int max(int a, int b)//求最大值函数{ if(a < b) return b; else return a;}int main(){ int n, m, i, j; int a[105][105], dp[105][105], dp1[105][105]; while(~scanf("%d %d", &n, &m)) { memset(dp, 0, sizeof(dp));//初始化数组dp memset(dp1, 0, sizeof(dp1));//初始化数组dp1 for(i = 1; i <= n; i++) { for(j = 1; j <= m; j++) { scanf("%d", &a[i][j]);//输入 } } for(i = 1; i <= n; i++)//左上到右下 { for(j = 1; j <= m; j++) { dp[i][j] = max(dp[i-1][j], dp[i][j-1]) + a[i][j];//从上边过来的最大累积和,和左边过来的最大累积和比较求最大,加上本身,赋值给dp } } for(i = 1; i <= n; i++)//右上到坐下 { for(j = m; j >= 1; j--) { dp1[i][j] = max(dp1[i-1][j], dp1[i][j+1]) + a[i][j];//从上边过来的最大累积和,和右边过来的最大累积和比较求最大,加上本身赋值给dp1 } } printf("%d\n", max(dp1[n][1], dp[n][m]));//输出最大的累积和 }}
0 0
- 【矩阵取数】SDUT 3773 数字矩阵
- noip2007 矩阵取数
- 矩阵取数游戏
- 矩阵取数游戏
- 矩阵取数
- 矩阵取数游戏
- 矩阵取数游戏
- 矩阵取数问题
- 矩阵取数
- 矩阵取数
- P1005矩阵取数
- 矩阵取数问题
- 矩阵取数
- 矩阵取数问题
- 矩阵取数问题
- 矩阵取数问题
- 矩阵取数游戏
- codevs1166 矩阵取数游戏
- HDU 1226 超级密码 队列解
- 面经
- 块状元素与内联元素的嵌套规则
- 个人记录-LeetCode 94. Binary Tree Inorder Traversal
- 关于令人抓狂的 E/HAL: load: id=gralloc != hmi->id=gralloc
- 【矩阵取数】SDUT 3773 数字矩阵
- CSS3颜色渐变
- 微信网页无法外部打开代码
- php中urlencode和urldecode 中文字符的转换
- C语言printf()函数:格式
- HDFS之上传文件到hdfs中
- git如何配置多个ssh-key
- javaee response乱码问题
- windows下删除lock文件、删除文件夹下的svn文件