动态规划
有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]);
}
}