POJ 1050 To the Max
2016-01-15 15:52
218 查看
动态规划的思想,用到的一个最基本的方法就是求一维数组连续数字串的和的最大值,状态转移方程为sum[i] = max(sum[i-1]+a[i],a[i])
在二维的情形中就是先枚举任意两行,然后对每一列在这两行之间的数字先求和,然后对求出来的数组求其一维连续数字串的最大值,得到的就是以两行为上下界的矩阵的最大值。
在二维的情形中就是先枚举任意两行,然后对每一列在这两行之间的数字先求和,然后对求出来的数组求其一维连续数字串的最大值,得到的就是以两行为上下界的矩阵的最大值。
#include <iostream> #include <cstdio> #include <memory.h> using namespace std; #define MAXN 510 int col[MAXN][MAXN]={0}; int matrix[MAXN][MAXN]={0}; int n; int tsum[MAXN]={0}; int mymax = 0; int main(){ scanf("%d",&n); for(int i=1;i<=n;++i){ for(int j=1;j<=n;++j){ scanf("%d",&matrix[i][j]); col[i][j] = matrix[i][j] + col[i][j-1]; } } for(int i=1;i<=n;++i){ for(int j=i;j<=n;++j){ for(int k=1;k<=n;++k){ tsum[k] = col[k][j] - col[k][i-1]; } for(int k=2;k<=n;++k){ tsum[k] = max(tsum[k-1]+tsum[k],tsum[k]); if(tsum[k]>mymax) mymax = tsum[k]; } } } printf("%d\n",mymax); return 0; }
相关文章推荐
- Android 视频文件加密
- 快速排序代码
- 简单实现ImageView宽度填满屏幕,高度自适应的两种方式
- java 数组讲解
- 闲思
- 静坐常思己过
- block与使用变量
- 封装jquery适配seajs模式
- C#线程同步
- CentOS 6编译安装yum和配置常用的yum源
- Delphi:ADOConnection连接SQLServer自动断网问题解决
- webdriver+python 对三大浏览器的支持
- OpenStack Nova hacking和读书笔记
- Android Studio——android中handler用法总结
- JS的奇怪问题
- CodeForces 366A Dima and Guards
- Dynamics CRM 2016 Series: Overview
- 雅虎股票接口
- spring 定时任务的 执行时间设置规则
- mysql 导入、导出sql