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; }