CH2201 小猫爬山

背景

Freda和rainbow饲养了N只小猫,这天,小猫们要去爬山。经历了千辛万苦,小猫们终于爬上了山顶,但是疲倦的它们再也不想徒步走下山了(呜咕>_<)。

描述

Freda和rainbow只好花钱让它们坐索道下山。索道上的缆车最大承重量为W,而N只小猫的重量分别是C1、C2……CN。当然,每辆缆车上的小猫的重量之和不能超过W。每租用一辆缆车,Freda和rainbow就要付1美元,所以他们想知道,最少需要付多少美元才能把这N只小猫都运送下山?

输入格式

第一行包含两个用空格隔开的整数,N和W。

接下来N行每行一个整数,其中第i+1行的整数表示第i只小猫的重量Ci。

输出格式

输出一个整数,最少需要多少美元,也就是最少需要多少辆缆车。

样例输入

5 1996
1
2
1994
12
29

样例输出

2

数据范围与约定

  • 对于100%的数据,1<=N<=18,1<=Ci<=W<=10^8。

来源

石家庄二中【Nescafé 26】杯NOIP模拟赛T1


思路

数据20-,很明显是搜索。

我们采用先花钱,再放小猫也就是说,有没有放满先不管,车先拿来,以后再继续放。这样,对于每只猫,就有两种情况:

1.坐之前就有的

2.再花1dollar

还可以加一个最优化剪枝~

代码十分简短。。。

代码

#include<bits/stdc++.h>
using namespace std;
#define MAXN 22 int N, W;
int c[MAXN];
int p[MAXN], ans; bool cmp( int x, int y ){ return x > y; } void DFS( int x, int cnt ){
if ( cnt >= ans ) return;//最优化剪枝
if ( x >= N ){ ans = cnt; return; }//搜索边界
for ( int i = 1; i <= cnt; ++i )
if ( p[i] + c[x] <= W ) p[i] += c[x], DFS( x + 1, cnt ), p[i] -= c[x];//放在之前具有的索道
p[cnt + 1] = c[x]; DFS( x + 1, cnt + 1 ); p[cnt + 1] = 0;//再花1dollar
} int main(){
scanf( "%d%d", &N, &W );
for ( int i = 0; i < N; ++i ) scanf( "%d", &c[i] );
sort( c, c + N, cmp ); ans = N;
DFS( 0, 0 );
printf( "%d\n", ans );
return 0;
}

「CH2201」小猫爬山 解题报告的更多相关文章

  1. tyvj P2018 「Nescafé26」小猫爬山 解题报告

    P2018 「Nescafé26」小猫爬山 时间: 1000ms / 空间: 131072KiB / Java类名: Main 背景 Freda和rainbow饲养了N只小猫,这天,小猫们要去爬山.经 ...

  2. TyvjP2018 「Nescafé26」小猫爬山

    P2018 「Nescafé26」小猫爬山 时间: 1000ms / 空间: 131072KiB / Java类名: Main 背景 Freda和rainbow饲养了N只小猫,这天,小猫们要去爬山.经 ...

  3. 「FJOI2016」神秘数 解题报告

    「FJOI2016」神秘数 这题不sb,我挺sb的... 我连不带区间的都不会哇 考虑给你一个整数集,如何求这个神秘数 这有点像一个01背包,复杂度和值域有关.但是你发现01背包可以求出更多的东西,就 ...

  4. 「ZJOI2016」大森林 解题报告

    「ZJOI2016」大森林 神仙题... 很显然线段树搞不了 考虑离线操作 我们只搞一颗树,从位置1一直往后移动,然后维护它的形态试试 显然操作0,1都可以拆成差分的形式,就是加入和删除 因为保证了操 ...

  5. 「SCOI2016」背单词 解题报告

    「SCOI2016」背单词 出题人sb 题意有毒 大概是告诉你,你给一堆n个单词安排顺序 如果当前位置为x 当前单词的后缀没在这堆单词出现过,代价x 这里的后缀是原意,但不算自己,举个例子比如abc的 ...

  6. 「NOI2015」寿司晚宴 解题报告

    「NOI2015」寿司晚宴 这个题思路其实挺自然的,但是我太傻了...最开始想着钦定一些,结果发现假了.. 首先一个比较套路的事情是状压前8个质数,后面的只会在一个数出现一次的再想办法就好. 然后发现 ...

  7. 「SCOI2015」国旗计划 解题报告

    「SCOI2015」国旗计划 蛮有趣的一个题 注意到区间互不交错,那么如果我们已经钦定了一个区间,它选择的下一个区间是唯一的,就是和它有交且右端点在最右边的,这个可以单调队列预处理一下 然后往后面跳拿 ...

  8. 「JLOI2015」骗我呢 解题报告?

    「JLOI2015」骗我呢 这什么神仙题 \[\color{purple}{Link}\] 可以学到的东西 对越过直线的东西翻折进行容斥 之类的..吧? Code: #include <cstd ...

  9. 「JLOI2015」城池攻占 解题报告

    「JLOI2015」城池攻占 注意到任意两个人的战斗力相对大小的不变的 可以离线的把所有人赛到初始点的堆里 然后做启发式合并就可以了 Code: #include <cstdio> #in ...

随机推荐

  1. thinkphp3.2配置redis缓存和文件缓存

    如果把一些常用但又不容易变的数据存缓存,而不是每次查数据库,这样能很大减轻数据库压力 最近由于项目需要,就尝试了一把redis,但是后面又用了tp3.2的文件缓存,直接进入主题: 在config.ph ...

  2. Best Open Source Software

    Best Open Source Software Open Source, Software, Top The promise of open source software is best qua ...

  3. LRJ-Example-06-01-Uva210

    #define _CRT_SECURE_NO_WARNINGS #include <cstdio> #include <cstdlib> #include <cstrin ...

  4. jsp获取后端java路由返回值

    html: <input type="hidden" id="tableName" value="${id}"> javascr ...

  5. C# winforms 输入颜色转换颜色名

    本文告诉大家如何输入颜色,如0xFFFF8000转换为 Orange 在 winforms 程序 可以使用下面代码转换 public static class HexColorTranslator { ...

  6. [转]【转】大型高性能ASP.NET系统架构设计

    大型高性能ASP.NET系统架构设计 大型动态应用系统平台主要是针对于大流量.高并发网站建立的底层系统架构.大型网站的运行需要一个可靠.安全.可扩展.易维护的应用系统平台做为支撑,以保证网站应用的平稳 ...

  7. php检测函数

    验证字符串是否为电子邮箱  var_dump(filter_var('bob@example.com', FILTER_VALIDATE_EMAIL));       //bob@example.co ...

  8. vue通信、传值的方式

    原文博主地址:https://blog.csdn.net/qq_35430000/article/details/79291287 看完还是受益匪浅,讲得很详细..感谢!

  9. P1074 彩票摇奖

    题目描述 为了丰富人民群众的生活.支持某些社会公益事业,北塔市设置了一项彩票.该彩票的规则是: (1) 每张彩票上印有 7 个各不相同的号码,且这些号码的取指范围为 1~33. (2) 每次在兑奖前都 ...

  10. SpringDataJPA+QueryDSL玩转态动条件/投影查询

    在本文之前,本应当专门有一篇博客讲解SpringDataJPA使用自带的Specification+JpaSpecificationExecutor去说明如何玩条件查询,但是看到新奇.编码更简单易懂的 ...