poj 1976 dp

题目看了好久,囧!

dp[i][j]表示前i节车厢用j个火车头去拉所能拉的最大乘客量

#include<stdio.h>
#include<string.h>
int dp[55555][4],a[55555];
int max(int a,int b)
{
	return a>b?a:b;
}
int main()
{
	int t,i,j,k,n,m;
	scanf("%d",&t);
	while(t--)
	{
	     scanf("%d",&n);
		 a[0]=0;
		 for(i=1;i<=n;i++) scanf("%d",&a[i]),a[i]+=a[i-1];
		 scanf("%d",&m);
		 memset(dp,0,sizeof(dp));
		 for(i=1;i<=n;i++)
			 for(j=1;j<4;j++)
			 {
				 k=i-m;
				 if(k<0) k=0;
				 dp[i][j]=max(dp[i-1][j],dp[k][j-1]+a[i]-a[k]);
			 }
			 printf("%d\n",dp[n][3]);
	}
	return 0;
}

  

posted @ 2011-11-17 16:23  Because Of You  Views(205)  Comments(0Edit  收藏  举报