Max Sum Plus Plus——进阶dp
·
题目大意:输入一个m,n分别表示成m组,一共有n个数即将n个数分成m组,m组的和加起来得到最大值并输出。
思路:dp+状态压缩
思路见CSDN
代码如下
#include <iostream>
#include <cstdio>
#include <algorithm>
//#include <map>
#include <stack>
#include<cstring>
using namespace std;
int dp[1000010];
int dpp[1000010];
int a[1000010];
int m,n;
int main(){
while(~scanf("%d %d",&m,&n))
{
memset(a,0,sizeof a);
for(int i=1;i<=n;i++)
{
scanf("%d",&a[i]);
}
memset(dp,0,sizeof dp);
memset(dpp,0,sizeof dpp);
int maxn = 0;
for(int i=1;i<=m;i++)
{
maxn = -0x7fffffff;
for(int j=i;j<=n;j++)
{
dp[j] = max(dp[j-1]+a[j],dpp[j-1]+a[j]);
dpp[j-1] = maxn;
maxn = max(maxn,dp[j]);
}
}
cout<<maxn<<endl;
}
}
更多推荐



所有评论(0)