之前做过一道题“破锣摇滚乐队”,把猫都编了号,每辆车只能装一些编号递增的猫,而且前一辆车的猫编号都比后一辆车小。那道题的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 小猫爬山的更多相关文章

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

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

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

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

  3. 「CH2201」小猫爬山 解题报告

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

  4. AcWing 165. 小猫爬山 DFS

    165. 小猫爬山 https://www.acwing.com/problem/content/description/167/ 题目 思路 dfs每一个小猫,对于要不要开新车的状态再进行dfs(注 ...

  5. luogu P1361 小猫爬山 [iddfs]

    题目描述 WD和LHX饲养了N只小猫,这天,小猫们要去爬山.经历了千辛万苦,小猫们终于爬上了山顶,但是疲倦的它们再也不想徒步走下山了. WD和LHX只好花钱让它们坐索道下山.索道上的缆车最大承重量为W ...

  6. 小猫爬山:dfs

    题目描述: 翰翰和达达饲养了N只小猫,这天,小猫们要去爬山. 经历了千辛万苦,小猫们终于爬上了山顶,但是疲倦的它们再也不想徒步走下山了(呜咕>_<). 翰翰和达达只好花钱让它们坐索道下山. ...

  7. 2018.11.5 Nescafe26 T1 小猫爬山

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

  8. 洛谷 P1361 小猫爬山

    题目描述 WD和LHX饲养了N只小猫,这天,小猫们要去爬山.经历了千辛万苦,小猫们终于爬上了山顶,但是疲倦的它们再也不想徒步走下山了. WD和LHX只好花钱让它们坐索道下山.索道上的缆车最大承重量为W ...

  9. codevs 4228 小猫爬山 【搜索】By cellur925

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

随机推荐

  1. codevs 2491 玉蟾宫

    codevs 2491 玉蟾宫 http://codevs.cn/problem/2491/ 题目描述 Description 有一天,小猫rainbow和freda来到了湘西张家界的天门山玉蟾宫,玉 ...

  2. 吉特仓库管理系统-.SQL Server 2012 升级企业版

    随着业务数据的不断增大,单表的数量已经上亿,查询的数据越来越慢,所以考虑到将数据库表分区,同时也将数据库升级到SQL Server 2012. 当时没有考虑更多,在服务器上安装了 SQL Server ...

  3. JavaScript的理解记录(4)

    客户端JavaScript:客户端就是Web浏览器; 一. 前奏: Web文档(document):一些呈现静态信息的页面,虽然有的页面是会动的,但信息本身还是静态! Web应用:可以动态载入信息,相 ...

  4. IQueryable和list本地集合区别

    详情请看:http://www.cnblogs.com/imust/archive/2012/11/18/2776320.html

  5. 从scrapy使用经历说开来

    关于scrapy这个Python框架,萌萌的官网这么介绍: An open source and collaborative framework for extracting the data you ...

  6. Day Four(Beta)

    站立式会议 站立式会议内容总结 331 今天:增加了若干话题:建立chat–user类,查阅bmob文档. 明天: 学习bmob的sql操作 442 今天:登录信息在主页上更新数据 遇到的问题:无 明 ...

  7. springMvc的第一个demo

    1.下载jar包 http://repo.spring.io/libs-release-local/org/springframework/spring/4.2.3.RELEASE/ 2.下载源码 j ...

  8. java之自定义回调接口

    本质上为:传递不同的实现的接口实例,执行不同的程序,即有扩展性. 在一个方法中,可以实现一个对象中的接口,实例化该接口,即可完成对不同对象的不同回掉. 在原有类中,调用接口中的方法,根据不同的接口实例 ...

  9. ps打造逼真印章效果

    新建500*500px--->路径工具 最后通过 通道扣取选取,填充白色,即可

  10. java 枚举的常见使用方法

    JDK1.5引入了新的类型-枚举,枚举的出现在日常开发中带来了极大的方便. 常用方法一:常量 JDK1.5之前我们平时定义系统常量,基本都是用public static final ... 出现枚举以 ...