POJ 1976-动态规划

xiaoxiao2021-02-28  38

动态规划

有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]); } }
转载请注明原文地址: https://www.6miu.com/read-600177.html

最新回复(0)