有n个车厢每个车厢有一定的乘客 现在用三个车头去拉这些车厢,每个车头能拉的最大车厢数量是m 而且这k个车厢必须是连续的 求这三个车头能拉的最大乘客数量
转移方程:DP[i][j]=max(DP[i-1][j],DP[i-m][j-1]+a[i]-a[i-m])
DP[i][j]表示前i个车厢用j个车头能拉的最大数量 当第i个车厢不拉时为DP[i-1][j] 第i个车厢拉时为DP[i-m][j-1]+a[i]-a[i-m](a[i]-a[i-m]表示车厢i-m到i 的乘客数量)
#include <stdio.h>
#include <algorithm>
#include <iostream>
using namespace std;
const int maxn= 50100;
int dp[maxn][4],arr[maxn];
int t,n,m;
int main()
{
scanf("%d",&t);
arr[0]=0;
while(t--)
{
scanf("%d",&n);
for(int i=1;i<=n;i++)
{
scanf("%d",&arr[i]);
arr[i]+=arr[i-1];
}
scanf("%d",&m);
for(int i=1;i<=n;i++)
{
int p=max(0,i-m);
for(int j=1;j<=3;j++)
{
dp[i][j]=max(dp[i-1][j],dp[p][j-1]+arr[i]-arr[p]);
}
}
printf("%d\n",dp[n][3]);
}
}