题解:
dp
f[i]表示运i头奶牛需要的时间
f[i]=f[i-j]+a[i]+2*m
然后ans=f[n]-m(最后一次不用跑回来)
代码:
#include<bits/stdc++.h> using namespace std; const int N=3005; int f[N],a[N],n,m; int main() { memset(f,0x3f3f3f3f,sizeof f); f[0]=0; scanf("%d%d",&n,&m); for (int i=1;i<=n;i++)scanf("%d",&a[i]),a[i]+=a[i-1]; for (int i=1;i<=n;i++) for (int j=1;j<=i;j++) f[i]=min(f[i],f[i-j]+2*m+a[j]); printf("%d",f[n]-m); }