HDU1003 Max Sum && HDU1024 Max Sum Plus Plus
来源:互联网 发布:春纪护肤品怎么样知乎 编辑:程序博客网 时间:2024/05/22 20:56
题目链接:http://acm.hdu.edu.cn/showproblem.php?pid=1003
1003是喜闻乐见的最大连续子串和,经典的动态规划题目,经典归经典,我确实是刚刚做……在这道题中,我们需要保证的是在计算过程之中,计算的和是一直增加的,如果碰到了让和减少的元素,直接把和更新为0,并且更新临时首指针,每找到一个更优的解,把真正的首指针和尾指针更新,整个过程中一直保证的是和是递增的。注意我说的是非全负的情况。
#include <cstdio>int sum, s, t, ss, maxn, a[100100];bool f;int main(){ int t, n, p; scanf("%d", &p); for (int k = 1; k <= p; k++){ scanf("%d", &n); f = 0, maxn = -9999999; sum = 0; for (int i = 1; i <= n; i++){ scanf("%d", &a[i]); if (a[i] >= 0) f = 1; } if (!f){ for (int i = 1; i <= n; i++) if (a[i] > maxn){ maxn = a[i]; s = i; } printf("Case %d:\n%d %d %d\n", k, maxn, s, s); } else{ s = 1; t = 1; ss = 0; for (int i = 1; i <= n; i++){ sum += a[i]; if (sum < 0){ ss = i; sum = 0; } else if (sum > maxn){ maxn = sum; s = ss + 1; t = i; } } printf("Case %d:\n%d %d %d\n", k, maxn, s, t); } if (k < p) printf("\n"); } return 0;}
题目链接:http://acm.hdu.edu.cn/showproblem.php?pid=1024
这道题厉害了,要求在n个数里面求m个最大子段和,要求最终的和最大,其实就是计算m次,因为这此不用记录区间的首尾元素,所以其实比上一道题好写一些。
#include <cstdio>#include <cstring>#include <algorithm>using namespace std;const int maxn = 1000100;int n, m, ans, a[maxn], f[maxn], g[maxn];int main(){ while (~scanf("%d%d", &m, &n)){ for (int i = 1; i <= n; i++) scanf("%d", &a[i]); memset(f, 0, sizeof(f)); memset(g, 0, sizeof(g)); for (int i = 1; i <= m; i++){ ans = -100 * maxn; for (int j = i; j <= n; j++){ f[j] = max(f[j - 1], g[j - 1]) + a[j]; g[j - 1] = ans; ans = max(ans, f[j]); } } printf("%d\n", ans); } return 0;}
- HDU1003 Max Sum && HDU1024 Max Sum Plus Plus
- hdu1024-Max Sum Plus Plus
- hdu1024 Max Sum Plus Plus
- HDU1024 Max Sum Plus Plus
- HDU1024--Max Sum Plus Plus
- HDU1024 Max Sum Plus Plus
- hdu1024 Max Sum Plus Plus
- hdu1024---Max Sum Plus Plus
- HDU1024 Max Sum Plus Plus
- HDU1024 Max Sum Plus Plus
- hdu1024 Max Sum Plus Plus
- HDU1024 Max Sum Plus Plus
- HDU1024 Max Sum Plus Plus
- hdu1024 Max Sum Plus Plus
- Max Sum Plus Plus||HDU1024
- HDU1024-Max Sum Plus Plus
- hdu1024 Max Sum Plus Plus
- HDU1024 Max Sum Plus Plus 【DP】
- java 执行shell
- 希尔排序
- 【算法导论笔记】模糊排序7-6
- 使用BoundsChecker查找内存泄露
- C语言第六堂课后作业
- HDU1003 Max Sum && HDU1024 Max Sum Plus Plus
- 今日总结 4月9日
- 磁盘IO:缓存IO、直接IO、内存映射
- C++内存管理
- PHP高效率写法(详解原因)
- 优酷视频地址
- YII 快速创建项目GII
- 窗口更新假死解决方法
- Excel Jdbc Driver 文档