杭电ACM1081——To The Max
来源:互联网 发布:淘宝网笔袋图片 编辑:程序博客网 时间:2024/05/02 00:20
开始看到这题的时候,一点头绪都没有,本来想用暴力解决的,可是看到n可以到100,估计了下会超时,就放弃了,想过用动归做,但是没有想到如何去做。就暂且放下了。
今天再看到这题,百度了下,明白了如何去做了,就是将各行合并,再当作最大子序列来做,就很简单了。
n行,分别跟其他的行进行合并,然后动归计算最大值,不断的跟新最大值。
附上AC代码:
#include <iostream>#include <cstdio>#include <cstring>using namespace std;int dp[105], temp[105];int num[105][105];int main(){int n, i, j;while(cin >> n){for(i = 0; i < n; i++){for(j = 0; j < n; j++){scanf("%d", &num[i][j]);}}int max = -10000000;for(i = 0; i < n; i++) // 从0到n-1,分别跟其他行合并来计算,包括自己这一行{for(j = i; j < n; j++){memset(temp, 0, sizeof(temp)); //数组初始化为0if(i == j){for(int k = 0; k < n; k++) //属于同一行。temp[k] = num[i][k];}else{for(int k = 0; k < n; k++) //不属于同一行,将i行到j行的值累加起来{for(int l = i; l <= j; l++)temp[k] += num[l][k];}}memset(dp, 0, sizeof(dp)); //递推数组初始化for(int k = 1; k <= n; k++) //下面的是简单的动归,很简单的{if(dp[k - 1] > 0)dp[k] = dp[k - 1] + temp[k - 1];elsedp[k] = temp[k - 1];if(dp[k] > max) //跟新最大值max = dp[k];}}}cout << max << endl;}return 0;}
0 0
- 杭电ACM1081——To The Max
- 杭电1081—动态规划To The Max
- 杭电 1081 To The Max
- 杭电1081 To The Max
- 杭电 acm 1181 To The Max
- 杭电1081-To The Max
- 【杭电1081】To The Max
- 杭电1081——to the max(动态规划和暴力法解)
- 杭电ACM HDU 1081 To The Max
- 杭电 HDU ACM 1081 To The Max
- 杭电2803The MAX
- 杭电-2803The MAX
- 【杭电】[2803]The MAX
- 【杭电2083】The MAX
- hdu1081——To The Max
- hdu——1081 To The Max
- 杭电——Max Sum
- 杭电1003——Max Sum
- java中10大常见异常
- android中的byte数组转换
- selenium 简单入门
- 华为机试-字符串M转化成N为单位的段
- android学习记录(十四)android震动功能调用
- 杭电ACM1081——To The Max
- 互联网广告的基本概念
- BufferedWriter通过字符数组来缓冲数据,当缓冲区满或者用户调用flush()函数时,它就会将缓冲区的数据写入到输出流中。
- 黑马程序员—Java基础---异常体系学习总结
- RGB转换到HSI的方法
- POJ1107 W's Cipher 【水题】
- Java多线程与并发应用-(6)-多个线程之间共享对象和数据的方式
- IndexOf小结
- mysql 多行变一行