博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
ny716 River Crossing
阅读量:6367 次
发布时间:2019-06-23

本文共 2653 字,大约阅读时间需要 8 分钟。

River Crossing

时间限制:1000 ms  |  内存限制:65535 KB
难度:4
描述

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   355 10  3461001
样例输出
1850 题目讲解:我和别人讨论很久才弄懂题目,有的说和很像,但是两个意思不同,又有很大的差别 我还是讲解一下大概意思吧,题中说道阿凡提需要把羊送到对面去,但是呢他只有一条船,而且他也可以选择每次带几个羊过去, 当然了,也可以一次性的带走完,带不完的话还要回来再带走,这样的话回来花的时间也要加上了,需要注意的是每个并羊没有对应的时间, 它所需要的时间取决于在这个时间顺序中她是第几个上船的; 下面看一下案列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分钟 参考代码如下:参考的大神的
1 #include
2 #include
3 using namespace std; 4 const int mmax=0x3fffffff; 5 int a[1005],mmin[1005],m; 6 int dp(int n) 7 { 8 if(n<=0) 9 return 0;10 if(mmin[n]!=mmax)11 return mmin[n];12 int ans=mmax;13 for(int i=1;i<=n;i++)14 {15 if(dp(n-i)+a[i]+m

代码二:

1 #include 
2 #include
3 #include
4 #include
5 #include
6 #include
7 #include
8 using namespace std; 9 int main()10 {11 int n,k,f[1500],ans[1500],l;12 int i,m,j,temp;13 scanf("%d",&k);14 for(i=1;i<=k;i++)15 {16 memset(f,0,sizeof(f));17 memset(ans,0,sizeof(ans));18 scanf("%d %d",&n,&m);19 f[0]=m;20 for(j=1;j<=n;j++)21 {22 23 scanf("%d",&temp);24 f[j]=f[j-1]+temp;25 }26 ans[1]=f[1];27 for(j=2;j<=n;j++)28 {29 ans[j]=f[j];30 for(l=1;l

 

 

转载地址:http://kgema.baihongyu.com/

你可能感兴趣的文章
走进 JDK 之 Long
查看>>
Android打地鼠游戏的修改和优化
查看>>
Java异常
查看>>
map、reduce、filter、for...of、for...in等总结
查看>>
html2canvas-实现页面截图
查看>>
入门 | 从文本处理到自动驾驶:机器学习最常用的50大免费数据集
查看>>
笔记-从源码角度分析alloc与init的底层
查看>>
消除GitHub上的历史记录
查看>>
自学 JAVA 的几点建议
查看>>
第十三天-企业应用架构模式-对象-关系元数据映射模式
查看>>
k8s与HPA--通过 Prometheus adaptor 来自定义监控指标
查看>>
Python 比特币教程之二: 机器人收发比特币
查看>>
虎牙直播在微服务改造方面的实践和总结
查看>>
怎样将优酷网站下载的视频KUX转MP4格式
查看>>
MongoDB 分组统计
查看>>
二进制状态码
查看>>
Vue 中 CSS 动画原理
查看>>
关于 Promise 的 9 个提示
查看>>
算法复习
查看>>
安卓中高级开发面试知识点之——缓存
查看>>