1617: [Usaco2008 Mar]River Crossing渡河问题

Time Limit: 5 Sec  Memory Limit: 64 MB
Submit: 1219  Solved: 895
[Submit][Status][Discuss]

Description

Farmer John以及他的N(1 <= N <= 2,500)头奶牛打算过一条河,但他们所有的渡河工具,仅仅是一个木筏。 由于奶牛不会划船,在整个渡河过程中,FJ必须始终在木筏上。在这个基础上,木筏上的奶牛数目每增加1,FJ把木筏划到对岸就得花更多的时间。 当FJ一个人坐在木筏上,他把木筏划到对岸需要M(1 <= M <= 1000)分钟。当木筏搭载的奶牛数目从i-1增加到i时,FJ得多花M_i(1 <= M_i <= 1000)分钟才能把木筏划过河(也就是说,船上有1头奶牛时,FJ得花M+M_1分钟渡河;船上有2头奶牛时,时间就变成M+M_1+M_2分钟。后面的依此类推)。那么,FJ最少要花多少时间,才能把所有奶牛带到对岸呢?当然,这个时间得包括FJ一个人把木筏从对岸划回来接下一批的奶牛的时间。

Input

* 第1行: 2个用空格隔开的整数:N 和 M

* 第2..N+1行: 第i+1为1个整数:M_i

Output

* 第1行: 输出1个整数,为FJ把所有奶牛都载过河所需的最少时间

Sample Input

5 10
3
4
6
100
1

输入说明:

FJ带了5头奶牛出门。如果是单独把木筏划过河,FJ需要花10分钟,带上
1头奶牛的话,是13分钟,2头奶牛是17分钟,3头是23分钟,4头是123分钟,将
5头一次性载过去,花费的时间是124分钟。

Sample Output

50

HINT

输出说明:

Farmer John第一次带3头奶牛过河(23分钟),然后一个人划回来

(10分钟),最后带剩下的2头奶牛一起过河(17分钟),总共花费的时间是

23+10+17 = 50分钟。

Source

Silver

#include<bits/stdc++.h>

#define N 2511
#define ll long long
#define inf 0x3f3f3f3f; using namespace std;
int n,m,cnt;
ll ans,f[N][N],T[N],sum[N]; inline int read()
{
int x=,f=;char c=getchar();
while(c>''||c<''){if(c=='-')f=-;c=getchar();}
while(c>=''&&c<=''){x=x*+c-'';c=getchar();}
return x*f;
} int main()
{
freopen("ly.in","r",stdin);
n=read();m=read();
for(int i=;i<=n;i++) for(int j=;j<=n;j++) f[i][j]=inf;
for(int i=;i<=n;i++)
{
T[i]=read();sum[i]=sum[i-]+T[i];
f[][i]=sum[i]+m;
}
for(int i=;i<=n;i++)
{
for(int j=i;j<=n;j++)
{
for(int k=;k<j;k++)
{
f[i][j]=min(f[i][j],min(f[i-][j],f[i-][k]+f[][j-k]+m));
}
}
}ans=inf;
for(int i=;i<=n;i++) ans=min(ans,f[i][n]);
printf("%lld\n",ans);
return ;
}

60暴力dp

/*
f[i][j]表示运i次送j头牛的最短时间
转移枚举k,由f[i-1][k]+f[1][j-k]转移过来
发现第一维是没用的。
*/
#include<bits/stdc++.h> #define N 2511
#define ll long long
#define inf 0x3f3f3f3f; using namespace std;
int n,m,cnt;
ll ans,f[N],T[N],sum[N]; inline int read()
{
int x=,f=;char c=getchar();
while(c>''||c<''){if(c=='-')f=-;c=getchar();}
while(c>=''&&c<=''){x=x*+c-'';c=getchar();}
return x*f;
} int main()
{
freopen("ly.in","r",stdin);
n=read();m=read();sum[]=m;
for(int i=;i<=n;i++) f[i]=inf;
for(int i=;i<=n;i++)
{
T[i]=read();sum[i]=sum[i-]+T[i];
f[i]=sum[i]+m;
}
for(int i=;i<=n;i++)
{
for(int j=;j<i;j++)
{
f[i]=min(f[i],f[j]+sum[i-j]+m);
}
}
printf("%lld\n",f[n]-m);
return ;
}

1617: [Usaco2008 Mar]River Crossing渡河问题(dp)的更多相关文章

  1. BZOJ 1617: [Usaco2008 Mar]River Crossing渡河问题( dp )

    dp[ i ] = max( dp[ j ] + sum( M_1 ~ M_( i - j ) ) + M , sum( M_1 ~ M_i ) ) ( 1 <= j < i )  表示运 ...

  2. BZOJ 1617: [Usaco2008 Mar]River Crossing渡河问题

    题目 1617: [Usaco2008 Mar]River Crossing渡河问题 Time Limit: 5 Sec  Memory Limit: 64 MB Description Farmer ...

  3. 【BZOJ】1617: [Usaco2008 Mar]River Crossing渡河问题(dp)

    http://www.lydsy.com/JudgeOnline/problem.php?id=1617 裸dp,很好做. 设f[i]表示i头牛到对岸所需最小时间.sum[i]表示运i头牛到对岸的时间 ...

  4. BZOJ 1617 [Usaco2008 Mar]River Crossing渡河问题:dp

    题目链接:http://www.lydsy.com/JudgeOnline/problem.php?id=1617 题意: Farmer John以及他的N(1 <= N <= 2,500 ...

  5. 【bzoj1617】[Usaco2008 Mar]River Crossing渡河问题 dp

    题目描述 Farmer John以及他的N(1 <= N <= 2,500)头奶牛打算过一条河,但他们所有的渡河工具,仅仅是一个木筏. 由于奶牛不会划船,在整个渡河过程中,FJ必须始终在木 ...

  6. BZOJ1617: [Usaco2008 Mar]River Crossing渡河问题

    1617: [Usaco2008 Mar]River Crossing渡河问题 Time Limit: 5 Sec  Memory Limit: 64 MBSubmit: 654  Solved: 4 ...

  7. [bzoj1617][Usaco2008 Mar]River Crossing渡河问题_动态规划

    River Crossing渡河问题 bzoj-1617 Usaco-2008 Mar 题目大意:题目链接. 注释:略. 想法:zcs0724出考试题的时候并没有发现这题我做过... 先把m求前缀和, ...

  8. [Usaco2008 Mar]River Crossing渡河问题[简单DP]

    Description Farmer John以及他的N(1 <= N <= 2,500)头奶牛打算过一条河,但他们所有的渡河工具,仅仅是一个木筏. 由于奶牛不会划船,在整个渡河过程中,F ...

  9. [Usaco2008 Mar]River Crossing渡河问题

    题目描述 Farmer John以及他的N(1 <= N <= 2,500)头奶牛打算过一条河,但他们所有的渡河工具,仅仅是一个木筏. 由于奶牛不会划船,在整个渡河过程中,FJ必须始终在木 ...

随机推荐

  1. GitHub总结

    1) 工作原理 2) 工作流程 clone资源到本地 更新本地资源 新增或修改clone的资源 查看状态 资源推送回github

  2. 图论算法——最短路径Dijkstra,Floyd,Bellman Ford

    算法名称 适用范围 算法过程 Dijkstra 无负权 从s开始,选择尚未完成的点中,distance最小的点,对其所有边进行松弛:直到所有结点都已完成 Bellman-Ford 可用有负权 依次对所 ...

  3. android 的Manifest对图标的影响

    转自 http://blog.csdn.net/yuan1590/article/details/6700683 先看看网路上的说法: Android.intent.action.MAIN决定应用程序 ...

  4. Python安装配置

    Python下载 官网下载地址:https://www.python.org/downloads/windows/ 下载安装包: python-3.5.0-amd64(64位).exe python- ...

  5. Linux虚拟机安装学习笔记

    一.Linux系统的安装1.VMwaer虚拟机的安装使用 官方下载软件地址:www.vmwaer.com 安装的虚拟机可以与现实的计算机进行通信 安装虚拟主机可以随意定制硬件安装配置建议: CPU:1 ...

  6. 九度oj 题目1061:成绩排序

    题目1061:成绩排序 时间限制:1 秒 内存限制:32 兆 特殊判题:否 提交:24473 解决:6960 题目描述: 有N个学生的数据,将学生数据按成绩高低排序,如果成绩相同则按姓名字符的字母序排 ...

  7. bash shell & front-end & auto publish & auto deploy

    bash shell & front-end & auto publish & auto deploy $ zip -r apitool-2018-11-22.zip apit ...

  8. [luoguP1013] 进制位(搜索)

    传送门 纯搜索,无优化! #include <cstdio> #include <cstring> #include <iostream> #include < ...

  9. 安装eclipse插件,很慢终于找到了解决的方法

    1 .除非你需要,否则不要选择"联接到所有更新站点" 在安装对话框里有一个小复选框,其标示为"在安装过程中联接到所有更新站点从而找到所需的软件."从表面上看,这 ...

  10. 2018/2/16 解析Logback的AppenderBase源码,并举一反三的实现Logback扩展功能的思路,以及它的实际业务应用场景

    在学习Logback的过程中,知道了它有一个可以将日志往第三方数据源写的功能,这个功能的实现就是这个AppenderBase类,不禁想看看它的源码. 下面是AppenderBase类的所有子类(也就是 ...