您的位置:首页 > 其它

HDUOJ Max Sum Plus Plus Plus--1244

2016-05-18 20:06 441 查看
#include<stdio.h>
#include<string.h>
int dp[1005][1005];
int main ()
{
int fw[1005][2],l[1005],num[1005];
int i,j,k,s,n,m;
while(scanf("%d",&n)&&n!=0)
{
scanf("%d",&m);
for(s=0,i=1;i<=m;i++)
{
scanf("%d",&l[i]);
fw[i][0]=s+1;
s+=l[i];
}
for(s=0,i=m;i>=1;i--)
{
fw[i][1]=n-s;
s+=l[i];
}
for(i=1;i<=n;i++)
scanf("%d",&num[i]);
memset(dp,0,sizeof(dp));
for(i=1;i<=m;i++)
{
s=0;
for(j=fw[i][0];j<=fw[i][1];j++)
{
if(j-fw[i][0]+1<=l[i])
{
s+=num[j];
//printf("%d   ",s);
if(j-fw[i][0]+1==l[i])
{
if(dp[i][j]<s+dp[i-1][j-l[i]])
for(k=j;k<=n;k++)
dp[i][k]=dp[i-1][j-l[i]]+s;
}
}
else
{
s+=num[j];
s-=num[j-l[i]];
if(dp[i][j]<s+dp[i-1][j-l[i]])
for(k=j;k<=n;k++)
dp[i][k]=dp[i-1][j-l[i]]+s;
}
}
}
printf("%d\n",dp[m]
);
}
return 0;
}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: