HDU 1024 Max Sum Plus Plus (基础dp)
来源:互联网 发布:森田疗法 知乎 编辑:程序博客网 时间:2024/06/06 11:32
/*基础dpA - Max Sum Plus Plus时间: 2017/02/18题意:在一组数取出m个不相交的区间,使区间和的总和最大。题解:dp[i][j]表示前i个数取第i个数,分为j个区间和的总和最大的值dp[i][j] = max(dp[i-1][j]+a[i], max(dp[0……(i-1)][j-1])+a[i]);因为dp[i][j]只和dp[][j-1]和dp[i-1][j]有关,所以只需一维数组即可max(dp[0……(i-1)])可以在i-1层的时候处理出来,优化时间。*/#include <iostream>#include <cstdio>#include <cstring>#include <cmath>#include <algorithm>#include <queue>#include <vector>#include <map>using namespace std;#define LL long long#define INF 0x3f3f3f3f#define PI acos(-1.0)#define E 2.71828#define MOD 1000000007#define N 1000010#define M 10010const double eps=1e-8;int a[N],dp[N],maxn[N];int main(){ int n,m; while(~scanf("%d%d",&m,&n)) { for(int i = 1; i <= n; i++) scanf("%d",&a[i]); memset(dp,0,sizeof(dp)); memset(maxn,0,sizeof(maxn)); int maxnn; for(int i = 1; i <= m; i++) { maxnn = -INF; for(int j = i; j <= n; j++) { dp[j] = max(dp[j-1],maxn[j-1])+a[j]; maxn[j-1] = maxnn; maxnn = max(maxnn,dp[j]); } //printf("\n%d\n",maxnn); } printf("%d\n",maxnn); } return 0;}
0 0
- HDU 1024 Max Sum Plus Plus (基础dp)
- HDU 1024 Max Sum Plus Plus(基础dp)
- Hdu 1024 Max Sum Plus Plus(基础DP)
- hdu 1024 Max Sum Plus Plus--DP
- hdu 1024 Max Sum Plus Plus(dp)
- hdu-1024-Max Sum Plus Plus-DP
- hdu 1024 Max Sum Plus Plus(dp)
- hdu 1024 Max Sum Plus Plus dp
- HDU DP - 1024 Max Sum Plus Plus
- HDU 1024 Max Sum Plus Plus【DP】
- HDU 1024 Max Sum Plus Plus(DP)
- HDU 1024 Max Sum Plus Plus DP
- HDU 1024 Max Sum Plus Plus DP *
- HDU-1024 Max Sum Plus Plus(dp)
- 【hdu 1024】Max Sum Plus Plus dp
- HDU-1024 Max Sum Plus Plus(DP)
- hdu 1024 Max Sum Plus Plus(dp)
- 【HDU 1024 Max Sum Plus Plus】+ dp
- String普通版本
- 菜狗的C++ primer读书笔记:第三章 字符串、向量和数组
- java虚拟机(jvm)垃圾收集算法剖析
- 【LeetCode23-29+518】 K个有序子链,交换链表顺序(指针调换),Vector删除元素,移位运算符>>,DP算法
- C#串口通信
- HDU 1024 Max Sum Plus Plus (基础dp)
- Gradle 的Daemon配置
- Linux下的FILE结构体
- Babel转码工具使es6\es7向es5转码
- AIDL详解
- linux下sublimetext的中文输入问题解决方法
- App优化之提升你的App启动速度之实例挑战
- Hadoop实践(零)---Hadoop项目生态系统
- 经典图像 HOG 特征