ny716 River Crossing
River Crossing
- 描述
-
Afandi is herding N sheep across the expanses of grassland when he finds himself blocked by a river. A single raft is available for transportation.
Afandi knows that he must ride on the raft for all crossings, but adding sheep to the raft makes it traverse the river more slowly.
When Afandi is on the raft alone, it can cross the river in M minutes When the i sheep are added, it takes Mi minutes longer to cross the river than with i-1 sheep (i.e., total M+M1 minutes with one sheep, M+M1+M2 with two, etc.).
Determine the minimum time it takes for Afandi to get all of the sheep across the river (including time returning to get more sheep).
- 输入
- On the first line of the input is a single positive integer k, telling the number of test cases to follow. 1 ≤ k ≤ 5 Each case contains:
* Line 1: one space-separated integers: N and M (1 ≤ N ≤ 1000 , 1≤ M ≤ 500).
* Lines 2..N+1: Line i+1 contains a single integer: Mi (1 ≤ Mi ≤ 1000)
- 输出
- For each test case, output a line with the minimum time it takes for Afandi to get all of the sheep across the river.
- 样例输入
-
2
2 10
3
5
5 10
3
4
6
100
1 - 样例输出
-
18
50
题目讲解:我和别人讨论很久才弄懂题目,有的说和过河问题很像,但是两个意思不同,又有很大的差别
我还是讲解一下大概意思吧,题中说道阿凡提需要把羊送到对面去,但是呢他只有一条船,而且他也可以选择每次带几个羊过去,
当然了,也可以一次性的带走完,带不完的话还要回来再带走,这样的话回来花的时间也要加上了,需要注意的是每个并羊没有对应的时间,
它所需要的时间取决于在这个时间顺序中她是第几个上船的;
下面看一下案列1:很显然羊是一下被带走完的,时间是3+5+10(自己的时间)=18分钟;
然而案例二却看不懂了吧,我就详细分析一下:首先是五个羊当然会有五个时间了,你有很多选择,一次带走完,一个一个的....
如果一次一个时间是多少呢?第一次走:3+10 回来:10 然后第二次再走:3+10(或许就在这疑惑了,怎么还是3呢为什么不是4呢,我说了羊没有对应的时间,
第一个上船的时间就是3,如果运两个羊第二个时间是4,然后回来后,又重新开始第一个,第二个....)然后又回来:10 第三次再走:3+10 回来:10 第四次再走3+10 回来:10
第五次再走:3+10 所以共:3+10 +10 +3+10 +10 +3+10 +10 +3+10 +10 +3+10=105分钟;
最优解应该是这个样子的第一次带三个羊:3+4+6+10 回来:10 再带走两个羊:3+4+10 共23+10+17=50分钟
参考代码如下:参考的大神的#include<iostream>
#include<cstdio>
using namespace std;
const int mmax=0x3fffffff;
int a[],mmin[],m;
int dp(int n)
{
if(n<=)
return ;
if(mmin[n]!=mmax)
return mmin[n];
int ans=mmax;
for(int i=;i<=n;i++)
{
if(dp(n-i)+a[i]+m<ans)
ans=dp(n-i)+a[i]+m;
}
return mmin[n]=ans;
}
int main()
{
int i,j,k,t,n;
scanf("%d",&t);
while(t--)
{
scanf("%d %d",&n,&m);
a[]=m;
for(i=;i<=n;i++)
{
scanf("%d",&a[i]);
a[i]+=a[i-];
mmin[i]=mmax;
}
printf("%d\n",dp(n)-m);
}
return ;
}代码二:
#include <iostream>
#include <algorithm>
#include <fstream>
#include <cstring>
#include <string>
#include <cstdio>
#include <cmath>
using namespace std;
int main()
{
int n,k,f[],ans[],l;
int i,m,j,temp;
scanf("%d",&k);
for(i=;i<=k;i++)
{
memset(f,,sizeof(f));
memset(ans,,sizeof(ans));
scanf("%d %d",&n,&m);
f[]=m;
for(j=;j<=n;j++)
{ scanf("%d",&temp);
f[j]=f[j-]+temp;
}
ans[]=f[];
for(j=;j<=n;j++)
{
ans[j]=f[j];
for(l=;l<j;l++)
if(ans[l]+ans[j-l]+m<ans[j])
ans[j]=ans[l]+ans[j-l]+m;
}
printf("%d\n",ans[n]); }
return ;
}
ny716 River Crossing的更多相关文章
- BZOJ1617: [Usaco2008 Mar]River Crossing渡河问题
1617: [Usaco2008 Mar]River Crossing渡河问题 Time Limit: 5 Sec Memory Limit: 64 MBSubmit: 654 Solved: 4 ...
- 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 ) 表示运 ...
- BZOJ 1617: [Usaco2008 Mar]River Crossing渡河问题
题目 1617: [Usaco2008 Mar]River Crossing渡河问题 Time Limit: 5 Sec Memory Limit: 64 MB Description Farmer ...
- 第六届河南省赛 River Crossing 简单DP
1488: River Crossing Time Limit: 1 Sec Memory Limit: 128 MB Submit: 83 Solved: 42 SubmitStatusWeb ...
- bzoj1617 / P2904 [USACO08MAR]跨河River Crossing
P2904 [USACO08MAR]跨河River Crossing 显然的dp 设$f[i]$表示运走$i$头奶牛,木筏停在未过河奶牛一侧所用的最小代价 $s[i]$表示一次运$i$头奶牛到对面的代 ...
- 1617: [Usaco2008 Mar]River Crossing渡河问题(dp)
1617: [Usaco2008 Mar]River Crossing渡河问题 Time Limit: 5 Sec Memory Limit: 64 MBSubmit: 1219 Solved: ...
- [bzoj1617][Usaco2008 Mar]River Crossing渡河问题_动态规划
River Crossing渡河问题 bzoj-1617 Usaco-2008 Mar 题目大意:题目链接. 注释:略. 想法:zcs0724出考试题的时候并没有发现这题我做过... 先把m求前缀和, ...
- USACO River Crossing
洛谷 P2904 [USACO08MAR]跨河River Crossing https://www.luogu.org/problem/P2904 JDOJ 2574: USACO 2008 Mar ...
- P2904 [USACO08MAR]跨河River Crossing
题目描述 Farmer John is herding his N cows (1 <= N <= 2,500) across the expanses of his farm when ...
随机推荐
- sql数据库表复制、查看是否锁表
1.不同数据库之间复制表的数据的方法: 当表目标表存在时: insert into 目的数据库..表 select * from 源数据库..表 当目标表不存在时: select * into 目的数 ...
- HTTP Content-type整理
文件扩展名 Content-Type(Mime-Type) 文件扩展名 Content-Type(Mime-Type) .*( 二进制流.不知道下载文件类型) application/octet-st ...
- java面试第十五天
网络编程: 多线程+网络: 1.服务器端的等待客户连接代码( while(true) ),服务器端与单个客户端交互的代码放入线程体( run ) 2.客户端如有其他要求,与服务器交互的代码也要放入线程 ...
- mysql-cluster 7.3.5-linux 安装
[集群环境] 管理节点 10.0.0.19 数据节点 10.0.0.12 10.0.0.17 sql节点 10.0.0.18 10.0.0 ...
- vim删除文件第n行到结尾、或某段内容
1. 编辑文件 vim myShell.sh 2. 转到文件末尾 G 3. 或者转到删除内容最后的行 :set nu #显示行号,便于确定哪行 200G #光标定到200行,表示要删除n-200行的内 ...
- kubectl命令使用
语法: kubectl [command] [TYPE] [NAME] [flags] 1 command:子命令,用于操作Kubernetes集群资源对象的命令,如create, de ...
- MySQL5.7 二进制源码包安装
一般平时安装MySQL都是源码包安装的,但是由于它的编译需要很长的时间,所以建议安装二进制免编译包.可以到MySQL官方网站去下载,也可以到comsenz官方网站下载,还有各大镜像站下载. 下载安装包 ...
- Archlive新年第一棒: 基于2.6.37稳定内核的archlive20110107
先上图,再来说明吧... 下载地址: http://u.115.com/file/t2cd0ea120 先上个本机器运行teamviewer的效果图吧... 如假包换的 2.6.37, 担保是目前最 ...
- JavaScript 设计模式之单例模式
一.单例模式概念解读 1.单例模式概念文字解读 单例就是保证一个类只有一个实例,实现的方法一般是先判断实例存在与否,如果存在直接返回,如果不存在就创建了再返回,这就确保了一个类只有一个实例对象.在Ja ...
- Android学习系列(19)--App离线下载
宜未雨而绸缪,毋临渴而掘井.----朱用纯<治家格言> 离线下载,在有网络的情况下下载服务器数据,以便无网络时也能阅读,就是离线阅读. 离线下载的功能点如下: ...