TYVJ2018小猫下山
来源:互联网 发布:js给select标签负值 编辑:程序博客网 时间:2024/06/02 15:55
背景
Freda和rainbow饲养了N只小猫,这天,小猫们要去爬山。经历了千辛万苦,小猫们终于爬上了山顶,但是疲倦的它们再也不想徒步走下山了(呜咕>_<)。
描述
Freda和rainbow只好花钱让它们坐索道下山。索道上的缆车最大承重量为W,而N只小猫的重量分别是C1、C2……CN。当然,每辆缆车上的小猫的重量之和不能超过W。每租用一辆缆车,Freda和rainbow就要付1美元,所以他们想知道,最少需要付多少美元才能把这N只小猫都运送下山?
输入格式
第一行包含两个用空格隔开的整数,N和W。
接下来N行每行一个整数,其中第i+1行的整数表示第i只小猫的重量Ci。
输出格式
输出一个整数,最少需要多少美元,也就是最少需要多少辆缆车。
//DFS解法
//枚举每一辆车搜索太过繁琐,枚举每只猫即可
#include<cstdio>
#include<iostream>
#include<algorithm>
#include<cmath>
using namespace std;
int n,w;
int g[30];//猫重量
unsigned int minc=999999;//记录最优解
unsigned int gcart[30];//车载重量
void search(int t,unsigned int now){//t_猫数目 now_车数目
int i;
if(now>=minc) return;
if(t>n){
minc=min(minc,now);
return;
}
for(i=1;i<=now;i++){
if(gcart[i]+g[t]<=w){
gcart[i]+=g[t];
search(t+1,now);
gcart[i]-=g[t];//记得复原
}
}
//现有车都不能满足需求时,加一辆新的车
gcart[now+1]=g[t];
search(t+1,now+1);
gcart[now+1]=0;
return;
}
int main(){
scanf("%d%d",&n,&w);
int i,j;
for(i=1;i<=n;i++)scanf("%d",&g[i]);
search(1,1);
printf("%d",minc);
return 0;
}
//结束
剪枝:
前i只猫最多用i辆车,枚举时候不需要超过i
搜索中车数超过已知最优解时直接return
unsigned大法好,加了以后AC,不加会错一个点,莫名神奇
这种搜法能过仅是因为数据规模小
以后若写了更优算法补在后面
- TYVJ2018小猫下山
- TYVJ2018 小猫爬山
- BSOJ3805 codevs4228 tyvj2018 【NOIP模拟赛】小猫爬山
- 小猫
- hrbust1179下山
- GSM“下山”,TD“上山”
- 牛顿下山法
- 二分法+牛顿下山法
- 牛顿下山法
- newton下山法
- 下山桩如何养活?
- 小乐乐想下山HLG
- soledede--牛顿下山法
- 牛顿下山法
- HLG 1813小乐乐要下山
- 牛顿下山法
- 猴子下山摘桃
- 猴子下山,动态规划。
- 15个值得开发人员关注的jQuery开发技巧和心得
- PostCSS一种更优雅、更简单的书写CSS方式
- 基于platform总线的中断(按键)字符设备驱动设计
- spring【7】(spring事务详解)
- Spring MVC 无XML配置入门示例
- TYVJ2018小猫下山
- 区间dp基础(石子归并,括号匹配,整数划分。。。)
- Codeforces Round #343 (Div. 2) D. Babaei and Birthday Cake(dp、BIT)
- The 6th Zhejiang Provincial Collegiate Programming Contest->ProblemF:80ers' Memory
- C++模板简单学习
- 线上使用阿里Druid连接池首次连接MySQL异常问题
- 大数相加
- Git分支管理策略
- HTTP Live Streaming for iPhone/iPad(HLS流媒体服务器)