tyvj2018 小猫爬山
之前做过一道题“破锣摇滚乐队”,把猫都编了号,每辆车只能装一些编号递增的猫,而且前一辆车的猫编号都比后一辆车小。那道题的DP状态是:f[i][j]表示装了前i只猫,使用了j辆车时第j辆车所剩空间的最大值。转移时,考虑第i只猫是新坐一辆车(从f[i-1][j-1]转移)还是坐第j辆车剩下的空位(从f[i-1][j]转移),当然要从某个子状态转移过来,必须保证这个子状态是存在的(f[i][j]存在就是说j辆车能够塞下前i只猫)
这个题,没有顺序的限制,所以无法直接套用那道题的状态。但n<=18,可以状态压缩。f[S][j]表示集合S中的猫坐在前j辆车中时,第j辆车剩下的最大空间。转移时枚举S中每一只猫即可。(不妨认为我们是从第一辆车开始依次装猫,装到第j辆的时候前面j-1辆车就不再考虑了)。最后从小到大找可行状态。
不过状态总数高达18*2^18,状态转移需要O(n),也就是说,总的时间复杂度为18*18*2^18,好虚....所幸,这个方法的特点是:对于相同的n,任何输入的循环次数相同,所以我在自己的电脑上随便造了一组n=18的数据。测试结果表明,1s内完全可以出解,所以就放心交上去了2333。确实能过,不过时间被搜索虐爆了....
#include<cstdio>
#include<cstring>
#include<ctime>
int f[1<<18][19];//about 5 Mib
int a[20];
int max(int a,int b){
return a>b?a:b;
}
int main(){
// double t1=clock();
int n,w;scanf("%d%d",&n,&w);
for(int i=0;i<n;++i)scanf("%d",a+i);
int lim=1<<n;
memset(f,0xc2,sizeof(f));//初始化-inf
f[0][0]=0;
for(int i=1;i<lim;++i){
for(int k=1;k<=n;++k){
for(int j=0;j<n;++j){
if(i&(1<<j)){
if(f[i^(1<<j)][k]>=a[j])f[i][k]=max(f[i][k],f[i^(1<<j)][k]-a[j]);
if(f[i^(1<<j)][k-1]>=0)f[i][k]=max(f[i][k],w-a[j]);
}
}
}
}
for(int i=1;i<=n;++i){
if(f[lim-1][i]>=0){
printf("%d\n",i);
break;
}
}
// double t2=clock();
// printf("%.3fs\n",(t2-t1)/CLOCKS_PER_SEC);
return 0;
}
tyvj2018 小猫爬山的更多相关文章
- TyvjP2018 「Nescafé26」小猫爬山
P2018 「Nescafé26」小猫爬山 时间: 1000ms / 空间: 131072KiB / Java类名: Main 背景 Freda和rainbow饲养了N只小猫,这天,小猫们要去爬山.经 ...
- tyvj P2018 「Nescafé26」小猫爬山 解题报告
P2018 「Nescafé26」小猫爬山 时间: 1000ms / 空间: 131072KiB / Java类名: Main 背景 Freda和rainbow饲养了N只小猫,这天,小猫们要去爬山.经 ...
- 「CH2201」小猫爬山 解题报告
CH2201 小猫爬山 背景 Freda和rainbow饲养了N只小猫,这天,小猫们要去爬山.经历了千辛万苦,小猫们终于爬上了山顶,但是疲倦的它们再也不想徒步走下山了(呜咕>_<). 描述 ...
- AcWing 165. 小猫爬山 DFS
165. 小猫爬山 https://www.acwing.com/problem/content/description/167/ 题目 思路 dfs每一个小猫,对于要不要开新车的状态再进行dfs(注 ...
- luogu P1361 小猫爬山 [iddfs]
题目描述 WD和LHX饲养了N只小猫,这天,小猫们要去爬山.经历了千辛万苦,小猫们终于爬上了山顶,但是疲倦的它们再也不想徒步走下山了. WD和LHX只好花钱让它们坐索道下山.索道上的缆车最大承重量为W ...
- 小猫爬山:dfs
题目描述: 翰翰和达达饲养了N只小猫,这天,小猫们要去爬山. 经历了千辛万苦,小猫们终于爬上了山顶,但是疲倦的它们再也不想徒步走下山了(呜咕>_<). 翰翰和达达只好花钱让它们坐索道下山. ...
- 2018.11.5 Nescafe26 T1 小猫爬山
题目 题目描述 Freda 和 rainbow 饲养了 N 只小猫,这天,小猫们要去爬山.经历了千辛万苦,小猫们 终于爬上了山顶,但是疲倦的它们再也不想徒步走下山了(呜咕>_<). Fre ...
- 洛谷 P1361 小猫爬山
题目描述 WD和LHX饲养了N只小猫,这天,小猫们要去爬山.经历了千辛万苦,小猫们终于爬上了山顶,但是疲倦的它们再也不想徒步走下山了. WD和LHX只好花钱让它们坐索道下山.索道上的缆车最大承重量为W ...
- codevs 4228 小猫爬山 【搜索】By cellur925
题目描述 Description Freda和rainbow饲养了N只小猫,这天,小猫们要去爬山.经历了千辛万苦,小猫们终于爬上了山顶,但是疲倦的它们再也不想徒步走下山了(呜咕>_<). ...
随机推荐
- python 测试驱动开发的简单例子
一.需求分析 需求:一个类 MyClass,有两个功能:add, sub 1.先功能设计 # myclass.py class MyClass(object): # 加法 def add(self): ...
- ICSharpCode.SharpZipLib
ICSharpCode.SharpZipLib 压缩.解压文件 附源码 http://www.icsharpcode.net/opensource/sharpziplib/ 有SharpZipli ...
- 玉伯的一道课后题题解(关于 IEEE 754 双精度浮点型精度损失)
前文 的最后给出了玉伯的一道课后题,今天我们来讲讲这题的思路. 题目是这样的: Number.MAX_VALUE + 1 == Number.MAX_VALUE; Number.MAX_VALUE + ...
- 熟悉css/css3颜色属性
颜色属性无处不在.字体要用颜色,背景可以有颜色,粒子特效更是离不开颜色.本文参考了一些资料简单总结下以备日后查阅. css中颜色的定义方式: 十六进制色 RGB & RGBA HSL & ...
- 网页中三角切边还半透明,现在的设计师越来越牛,css也要跟上啊
需求 今天在群里看到一个需求,啊这种三角形缺角怎么做啊,还带半透明阴影的. 分析 要实现这个,可以用css做三角,网上找一下代码,像这样. 由于以前没有试过border能不能带透明,所以需要试验一下. ...
- [云上天气预报-有时有闪电]2月3日23:00-4:00阿里云SLB升级期间网络会闪断
大家好,2月3日23:00-2月4日4:00,阿里云将对SLB(负载均衡)进行升级,在升级期间,SLB会有约4-8次的网络闪断.由此给您带来麻烦,望谅解! 阿里云官方公告内容如下: 尊敬的用户: 您好 ...
- MVVM小记
这篇小记源自于codeproject上的一篇文章 http://www.codeproject.com/Articles/100175/Model-View-ViewModel-MVVM-Explai ...
- 《深入理解Spark:核心思想与源码分析》(前言及第1章)
自己牺牲了7个月的周末和下班空闲时间,通过研究Spark源码和原理,总结整理的<深入理解Spark:核心思想与源码分析>一书现在已经正式出版上市,目前亚马逊.京东.当当.天猫等网站均有销售 ...
- 调试记录:The public type <<classname>> must be defined in its own file
(摘自stackoverflow) “The public type <<classname>> must be defined in its own file” error ...
- [转]java 输出流转输入流
ByteArrayOutputStream.toByteArray ByteArrayInputStream StringWriter.toString StringReader 字符流和二进制流是j ...