【NOIP2013模拟】小猫爬山
来源:互联网 发布:穿衣服的软件 编辑:程序博客网 时间:2024/04/27 10:22
【NOIP2013模拟】小猫爬山
DescriptionFreda和rainbow饲养了N只小猫,这天们要去爬山。经历了千辛万苦,小猫们终于爬上了山顶,但是疲倦的它们再也不想徒步走下(呜咕>_<>_<)。
Freda和rainbow只好花钱让它们坐索道下山。索道上的缆车最大承重量为W,而N只小猫的重量分别是 C1、C2…… CN。当然,每辆缆车上的小猫重量之和不能超过W。每 租用一辆缆车,Freda和rainbow就要付1美元,所以他们想知道,最少需要付多少美元才能把这N只小猫都运送下山?
Input
第一行包含两个用空格隔开的整数,N和W。
接下来N行每一个整数,其中第 i+1行的整数表示第i只小猫的重量Ci。
Output
输出 一个整数,最少需要多美元也就是辆缆车 。
Sample Input
5 1996
1
2
1994
12
29
Sample Output
2
Data Constraint
对于100%的数据,1<=N<=18,1<=Ci<=W<=10^8
这道题其实看起来好像挺难的样子,但是我们转眼看看数据范围1<=N<=18,1<=Ci<=W<=10^8,头上的天空就顿时晴朗了起来——倘若你想到了——这是道水题。
这题的正解就是——brute force(暴力)+dfs。
解题思路是这样的:
这一题如果我们用递归枚举一只猫坐上的缆车,我们可以得出,倘若第i只猫坐在第j辆缆车上,那么一定有i>=j那么,代码就分为以下几个步骤:
1.首先从小到大枚举要用的缆车数量,for i=1 to n。
2.递归枚举每只猫所乘坐的缆车,参数x为当前猫的序号,for o=1~min(x,i),用一个f数组表示第i个缆车所乘猫的总重量,倘若c[x]+f[i]<w,那么递归下去。
3.倘若枚举完了所有猫,意味着当前所用的缆车个数符合条件,直接输出。
(此题为迭代深搜的题目)
那么这道题就可以轻轻松松地拿到100了。
据说有一种水法可以水过数据——切猫溶车法。(sum+w-1)div w{sum为所有猫的总重}
codes:
var
f,a:array[0..30]of longint;
n,w,i,h,t:longint;
procedure dg(x:longint);
var o:longint;
begin
if x>n then
begin
writeln(i);
halt;
end;
for o:=1 to i do
begin
if o>x then break;
if w>=f[o]+a[x] then
begin
inc(f[o],a[x]);
dg(x+1);
dec(f[o],a[x]);
end;
end;
end;
begin
read(n,w);
for i:=1 to n do read(a[i]);
h:=1; t:=n;
for i:=1 to n do dg(1);
writeln(i);
end.
0 0
- 【NOIP2013模拟】小猫爬山
- 小猫爬山
- BSOJ3805 codevs4228 tyvj2018 【NOIP模拟赛】小猫爬山
- TYVJ2018 小猫爬山
- 状压动规:BSOJ3805 小猫爬山
- 洛谷 P1361 小猫爬山
- TYVJ 2018 小猫爬山
- 【洛谷P1361】小猫爬山
- 【tyvj】【搜索】小猫爬山
- 洛谷 P1361 小猫爬山
- P1361 小猫爬山 bool dfs
- 小猫爬山 搜索 先放大的
- 二分答案+DFS验证 小猫爬山
- 爬山算法->模拟退火
- 爬山算法&模拟退火
- 【NOIP模拟】爬山
- TYVJ P2018 「Nescafé26」小猫爬山
- tyvj P2018 「Nescafé26」小猫爬山
- C++程序设计必知:多文件结构和编译预处理命令
- 关于Device Tocken的改变
- android 命令(adb shell)进入指定模拟器或设备
- Android Service 学习--精简解析
- 回调函数
- 【NOIP2013模拟】小猫爬山
- CSRF攻击方式
- 标注工具
- php 利用远程图片创建新图片(jpg,gif,png)
- C#日期时间格式化
- 堆排序算法解析
- DP 动态规划 Problem Q 1017 背包问题
- 初识WPF
- TCP中的MSS解读