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 ...
随机推荐
- glibc的几个有用的处理二进制位的内置函数(转)
— Built-in Function: int __builtin_ffs (unsigned int x) Returns one plus the index of the least sign ...
- 更换已存在项目的svn的地址
CreateTime--2017年11月23日16:20:14 Author:Marydon 如何更换已存在项目的svn的地址? 参考链接:http://blog.csdn.net/sinat_2 ...
- HDU 2795 Billboard (线段树)
Billboard Time Limit: 20000/8000 MS (Java/Others) Memory Limit: 32768/32768 K (Java/Others) Total ...
- spring mvc 图片上传,图片压缩、跨域解决、 按天生成文件夹 ,删除,限制为图片代码等相关配置
spring mvc 图片上传,跨域解决 按天生成文件夹 ,删除,限制为图片代码,等相关配置 fs.root=data/ #fs.root=/home/dev/fs/ #fs.root=D:/fs/ ...
- python之函数用法getattr()
# -*- coding: utf-8 -*- #python 27 #xiaodeng #python之函数用法getattr() #getattr() #说明: ''' getattr(...) ...
- python简单实现随机验证码
这是自己在学习pyton时写的一个随机验证码,有不对的地方欢迎指出 代码 import random def verification(): lis = '' for i in range(4): S ...
- 设置sqlplus访问远程oracle数据库的最快方法
设置sqlplus访问远程oracle数据库的最快方法 时间:2010-01-21 10:57来源: 作者: 点击: 2次 设置sqlplus访问远程oracle数据库的最快方法,如果要连接远程数据库 ...
- ArchLinux下LXDE的安装与设置心得
安装 首先安装基本的桌面环境: $ sudo pacman -S lxde 奇怪的是默认并没有安装面板lxpanel,而且源里也没有,只好从AUR安装之: $ yaourt -S lxpanel-sv ...
- HDUOJ----4509湫湫系列故事——减肥记II
湫湫系列故事——减肥记II Time Limit: 5000/2000 MS (Java/Others) Memory Limit: 65535/32768 K (Java/Others)Tot ...
- 总结PLSQL的快捷键以及使用技巧
http://www.dedecms.com/knowledge/data-base/oracle/2012/0724/3643.html 最近在开发过程中,遇到一些麻烦,就是开发效率问题,有时候其他 ...