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;

}

  

你可能感兴趣的:(poj)