zoukankan      html  css  js  c++  java
  • 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
    ",f[n]-t[0]);
    	return 0;
    }
    

      

  • 相关阅读:
    Java 继承
    java 封装
    单选题
    实操题
    面试题
    Linux系统常用命令
    Shell脚本编写登陆小程序.sh
    利用shell脚本实现每隔60秒磁盘内存数据监控脚本
    shell脚本一键配置本地yum源
    shell点名脚本不重复人名
  • 原文地址:https://www.cnblogs.com/DriverLao/p/8401222.html
Copyright © 2011-2022 走看看