BZOJ 1617 Usaco 2008 Mar. River Crossing渡河问题
Posted Driver_Lao
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了BZOJ 1617 Usaco 2008 Mar. River Crossing渡河问题相关的知识,希望对你有一定的参考价值。
【题解】
显然是个DP题。
设$f[i]$表示送$i$头牛过河所需的最短时间,预处理出$t[i]$表示一次性送i头牛过河所需时间,那么我们可以得到转移方程:$f[i]=min(f[i],f[i-j]+t[j]+t[0])$ (这里的$t[0]$指的是FJ独自过河的时间)
这样就可以做一个$n$方的DP了
#include<cstdio> #include<algorithm> #define rg register #define inf (1e9) #define N (100010) using namespace std; int n,m,f[N],t[N]; inline int read(){ int k=0,f=1; char c=getchar(); while(c<\'0\'||c>\'9\')c==\'-\'&&(f=-1),c=getchar(); while(\'0\'<=c&&c<=\'9\')k=k*10+c-\'0\',c=getchar(); return k*f; } inline int min(int x,int y){return x<y?x:y;} int main(){ n=read(); t[0]=read(); for(rg int i=1;i<=n;i++) t[i]=read()+t[i-1]; for(rg int i=1;i<=n;i++){ f[i]=inf; for(rg int j=1;j<=i;j++) f[i]=min(f[i],f[i-j]+t[j]+t[0]); } printf("%d\\n",f[n]-t[0]); return 0; }
以上是关于BZOJ 1617 Usaco 2008 Mar. River Crossing渡河问题的主要内容,如果未能解决你的问题,请参考以下文章
BZOJ 1617 [Usaco2008 Mar]River Crossing渡河问题:dp
BZOJ 1617 Usaco 2008 Mar. River Crossing渡河问题
1617: [Usaco2008 Mar]River Crossing渡河问题(dp)