题解:

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);  
}

 

posted on 2018-02-22 14:56  宣毅鸣  阅读(65)  评论(0编辑  收藏  举报