POJ 2923 DP
题意:
两辆车去运一堆货物,货物数量小于等于10,问最少需要几趟能把货物全部运到目的地。
思路:
思路很简单,就是状态压缩成二进制。判断一下每个状态能不能运输。再进行一下DP。
设s[]数组里记录所有能转移的状态。
状态转移方程:f[i|s[j]]=min(f[i|s[j]],f[i]+1)
但是。 实现起来。。求出s[]数组用的方法很重要。。
先是二重循环枚举状态 但是这会超时。。。 竟然卡不过去。。。好失败
然后就想当然地用lowbit写。。。。肯定是WA了。
最后请教了cy才把这道题解了。。。她用了一个小优化。先统计出来1出现在哪里,然后再枚举,效率是会快一些。。
TLE代码:
// by SiriusRen
#include <cstdio>
#include <cstring>
#include <algorithm>
using namespace std;
int cases,n,C1,C2,w[11],s[1024],top,f[1024];
int main(){
scanf("%d",&cases);
for(int I=1;I<=cases;I++){
top=0,scanf("%d%d%d",&n,&C1,&C2);
for(int i=1;i<=n;i++)scanf("%d",&w[i]);
for(int i=1;i<=(1<<n)-1;i++)
for(int j=0;j<=i;j++)
if(i==(i|j)){
int tempx=i&j,tempy=i^j,jyx=0,jyy=0;
for(int k=1;tempx;k++,tempx/=2)if(tempx&1)jyx+=w[k];
for(int k=1;tempy;k++,tempy/=2)if(tempy&1)jyy+=w[k];
if((jyx<=C1&&jyy<=C2)){s[top++]=i;break;}
}
memset(f,0x3f,sizeof(f)),f[0]=0;
for(int i=0;i<=(1<<n)-1;i++)
for(int j=0;j<top;j++)
if(!(i&s[j]))f[i|s[j]]=min(f[i|s[j]],f[i]+1);
printf("Scenario #%d:\n%d\n\n",I,f[(1<<n)-1]);
}
}
AC代码:
// by SiriusRen
#include <cstdio>
#include <cstring>
#include <algorithm>
using namespace std;
int cases,n,C1,C2,w[11],s[1024],top,f[1024];
bool judge(int x){
int q[11],pos=0,sum=0;
for(int k=1;x;k++,x>>=1)if(x&1)q[++pos]=k,sum+=w[k];
for(int i=0;i<1<<pos;i++){
int s=0;
for(int j=1;j<pos;j++)
if(i&(1<<j))s+=w[q[j]];
if((s<=C1&&sum-s<=C2)||(s<=C2&&sum-s<=C1))return 1;
}
return 0;
}
int main(){
scanf("%d",&cases);
for(int I=1;I<=cases;I++){
top=0,scanf("%d%d%d",&n,&C1,&C2);
for(int i=1;i<=n;i++)scanf("%d",&w[i]);
for(int i=1;i<1<<n;i++)
if(judge(i))s[top++]=i;
memset(f,0x3f,sizeof(f)),f[0]=0;
for(int i=0;i<1<<n;i++)
for(int j=0;j<top;j++)
if(!(i&s[j]))f[i|s[j]]=min(f[i|s[j]],f[i]+1);
printf("Scenario #%d:\n%d\n\n",I,f[(1<<n)-1]);
}
}
POJ 2923 DP的更多相关文章
- 【POJ 2923】Relocation(状压DP+DP)
题意是给你n个物品,每次两辆车运,容量分别是c1,c2,求最少运送次数.好像不是很好想,我看了网上的题解才做出来.先用状压DP计算i状态下,第一辆可以运送的重量,用该状态的重量总和-第一辆可以运送的, ...
- poj 2923 状压dp+01背包
好牛b的思路 题意:一系列物品,用二辆车运送,求运送完所需的最小次数,两辆车必须一起走 解法为状态压缩DP+背包,本题的解题思路是先枚举选择若干个时的状态,总状态量为1<<n,判断这些状态 ...
- poj 2923(状态压缩dp)
题意:就是给了你一些货物的重量,然后给了两辆车一次的载重,让你求出最少的运输次数. 分析:首先要从一辆车入手,搜出所有的一次能够运的所有状态,然后把两辆车的状态进行合并,最后就是解决了,有两种方法: ...
- POJ 2923 Relocation 装车问题 【状态压缩DP】+【01背包】
题目链接:https://vjudge.net/contest/103424#problem/I 转载于:>>>大牛博客 题目大意: 有 n 个货物,并且知道了每个货物的重量,每次用 ...
- POJ 2923 Relocation(01背包变形, 状态压缩DP)
Q: 如何判断几件物品能否被 2 辆车一次拉走? A: DP 问题. 先 dp 求解第一辆车能够装下的最大的重量, 然后计算剩下的重量之和是否小于第二辆车的 capacity, 若小于, 这 OK. ...
- POJ 2923 Relocation(状压DP+01背包)题解
题意:给你汽车容积c1,c2,再给你n个包裹的体积,问你最少运几次能全运走 思路:用2进制表示每次运送时某物在不在此次运送之中,1在0不在.我们把运送次数抽象成物品价值,把状态抽象成体积,用一个dp[ ...
- POJ 2923 【01背包+状态压缩/状压DP】
题目链接 Emma and Eric are moving to their new house they bought after returning from their honeymoon. F ...
- POJ 2923 Relocation(状压DP)题解
题意:有2辆车运货,每次同时出发,n(<10),各自装货容量c1 c2,问最少运几次运完. 思路:n比较小,打表打出所有能运的组合方式,用背包求出是否能一次运走.然后状压DP运的顺序. 代码: ...
- [POJ 2923] Relocation (动态规划 状态压缩)
题目链接:http://poj.org/problem?id=2923 题目的大概意思是,有两辆车a和b,a车的最大承重为A,b车的最大承重为B.有n个家具需要从一个地方搬运到另一个地方,两辆车同时开 ...
随机推荐
- CSS vs. JS Animation: 哪个更快
CSS vs. JS Animation: 哪个更快? CSS vs. JS Animation: 哪个更快? 基于JavaScript的动画竟然已经默默地比CSS的transition动画快了?而且 ...
- 使用boost.python进行混合开发
使用boost.python进行混合开发 原文请参照官网和各方参考,本文有改动! 参考链接:http://blog.csdn.net/lanbing510/article/details/121979 ...
- VS2012编译PCL1.70的过程
以防博主删除文档,重新copy一遍... 关于个人的几个注意事项: 对于boost,可以使用vc100的库,来编译VC110的代码: 对于确实的包含,一个一个添加,要耐心等待!!! 原文链接:http ...
- Java学习笔记2——数据类型和转换
前提知识: 1字节=8bit:1bit以一个二极管表示,代表2个状态(0或者1):2bit代表22即4种状态(00,01,10,11),8bit即是28即256种状态,16bit即是65536种状态. ...
- window窗口操作
打开新窗口 window.open([url],[窗口名称],[参数字符串]) window.open("http://baidu.com","_balnk", ...
- Discuz 3x 配置问题
1.注意config里面配置的路径 2.注意ucenter里面 的密钥要一直 3.IP 的选择
- SciSharpCube:容器中的SciSharp,.NET机器学习开箱即用
SciSharp Cube 在Docker容器中快速体验SciSharp机器学习工具的最新功能. 项目地址:https://github.com/SciSharp/SciSharpCube 从Dock ...
- appium不能获取webview内容的解决办法
在用appium对小猿搜题app进行自动化测试时,准备用page_source打印出文章的xml内容 但是发现只能打印出外部结构内容,实际的文章内容却没有显示 截图如下 查询之后,得知需要通过cont ...
- HDU 5126 stars (四维偏序+树状数组)
题目大意:略 题目传送门 四维偏序板子题 把插入操作和询问操作抽象成$(x,y,z,t)$这样的四元组 询问操作拆分成八个询问容斥 此外$x,y,z$可能很大,需要离散 直接处理四维偏序很困难,考虑降 ...
- 基于Tags的简单内容推荐的实现
原来为了简单方便,自己小网站上的文章页的相关内容推荐就是从数据库里随机抽取数据来填充一个列表,所以一点相关性都没有,更本没有办法引导用户去访问推荐内容. 算法选择 如何能做到相似内容的推荐呢,碍于小网 ...