基础DP,数列中取k个区间,使和最大
2017-05-15 11:13
375 查看
#include<stdio.h> #include<stdlib.h> #include<string.h> #include<math.h> #include<iostream> #include<algorithm> #include<stack> #include<queue> #include<vector> #include<set> #include<map> #include<string> using namespace std; typedef long long ll; typedef unsigned long long ull; const ll INFF=0x3f3f3f3f3f3f3f3f; const int INF=0x7f7f7f7f; int a[1000010]; int maxx[1000010]; int dp[1000010]; int main() { int k,n; while(scanf("%d%d",&k,&n)!=EOF) { for(int i=1;i<=n;i++) { scanf("%d",&a[i]); } memset(dp,0,sizeof(dp)); memset(maxx,0,sizeof(maxx)); int maxxx; for(int i=1;i<=k;i++) { maxxx=-INF; for(int j=i;j<=n;j++) { dp[j]=max(dp[j-1]+a[j],maxx[j-1]+a[j]); maxx[j-1]=maxxx; maxxx=max(dp[j],maxxx); } } printf("%d\n",maxxx); } return 0; }
相关文章推荐
- 【hihocoder 1388】【区间DP】A Game【给出一个数列,两人每次从数列的头尾取数,小ho 先取,小hi每次都采取最优策略,问小ho最终能取得的数的总和最大是多少】
- 【区间DP】最大的算式
- hdu 1003/poj 1050 连续子序列最大和经典基础dp
- NOJ 1017 乘积最大 (经典的区间dp)
- poj 1505 dp(数列分段,最大段和最小)
- hdu 1003 基础dp:最大字连续子串和
- hdu 1754 (区间最大线段树基础题)
- 石子合并问题(一) (基础的区间dp)
- HDU 1003 Max Sum(最大区间和,DP)
- hrbustoj1212 乘积最大 区间DP
- (基础dp(最大连续子串和))华中区邀请赛,B.Magic
- POJ 2355(区间最大值-zkw线段树优化Dp方程)
- Codeforces Round #205 (Div. 2)C 选取数列可以选择的数使总数最大——dp
- hdu 4293 dp求最大权值不重合区间
- HDU-#1003 Max Sum(DP+区间最大子序列)
- 石子合并~区间dp基础
- dp之区间:最大k乘积
- poj 2955 Brackets(区间DP,经典问题)求有规律的括号的最大长度
- hdu 1087 Super Jumping! Jumping! Jumping!(基础DP,最大上升子序列和)
- UVa 11404 - Palindromic Subsequence(最大回文串,区间DP)