图片中的说明:
17是人(m=10) + 前两头牛的前缀和(3+4)
#include <bits/stdc++.h>
using namespace std;
typedef long long ll;
const int N = 5e4 + 10;
int sum[N];
int w[N];
int n,m;
int f[N];
int main(){
cin >> n >> m;
for(int i = 1; i <= n; i++){
cin >> w[i];
sum[i] = sum[i - 1] + w[i];
//载i头牛的总时间(单向路)
}
for(int i = 1; i <= n; i++){
sum[i] += 2 * m;
}//加上人的来回时间。
memset(f,0x3f,sizeof(f));
f[0] = 0;
//背包的思路
for(int i = 1; i <= n; i++){
for(int j = i; j <= n; j++){
f[j] = min(f[j],f[j - i] + sum[i]);
}
}
cout << f[n] - m<< endl;//最后人不用划回去。
return 0;
}