[POJ 2923] Relocation (动态规划 状态压缩)
题目链接:http://poj.org/problem?id=2923
题目的大概意思是,有两辆车a和b,a车的最大承重为A,b车的最大承重为B。有n个家具需要从一个地方搬运到另一个地方,两辆车同时开,问最少需要搬运几次?
我先想的是我由A车开始搬,搬运能装的最大的家具总重,然后状态压缩记录下搬运了哪些,然后再由B车搬运,状态压缩记录搬运了哪些。以此类推,直到状态满了。
以上方法TLE
然后,实在想不出来了,看了题解:http://blog.csdn.net/woshi250hua/article/details/7636061
也就是说先确定哪些状态是两辆车一次可以搬完的。
怎么确定呢?首先我们先确定出给定状态集合中所有可能出现的并且可以被a车运送的重量,然后看是否存在总重量减去可被a车运送的重量所得到的剩余重量是否能够被b车运送。
如果可以,则这个状态是可以被a,b两辆车一次就送完的。
那么怎么确定给定状态集合中所有可能出现的并且可以被a车运送的重量呢?
这又是一个dp。
设计状态dp[i][j]表示状态集合中的前i个物品是否能够组成j这个重量
如果dp[i-1][j-w[i]]已经出现了(就是说如果存在了重量j-w[i],我只需要填上重量w[i]就可以形成j),那么dp[i-1][j]就可以组成。
这个问题结束。
对于总问题:
设计状态dp[i][j]表示从前i种已知可以一次搬完的里面搬状态j需要的最少次数。
状态转移:dp[i][j|mask[i]] = min(dp[i-1][j]+1,dp[i-1][j|mask[i]])
#include <cstdio>
#include <algorithm>
#include <cstring>
#include <cmath>
#include <map>
#include <iterator>
#include <vector>
using namespace std;
typedef long long LL; int T;
int n,c[];
int w[];
int mask[];
int dp[]; bool C(int x){
bool can[];
memset(can,,sizeof(can));
can[] = true;
int sum = ;
for( int i=;i<=n;i++ )if((x>>(i-))&){
sum += w[i];
for( int j=c[];j>=w[i];j--){
if( can[j-w[i]] ) can[j] = true;
}
}
for(int i=;i<=c[];i++){
if( can[i]&&sum-i<=c[] ) return true;
}
return false;
} int main(){
scanf("%d",&T);
for(int t=;t<=T;t++){
scanf("%d%d%d",&n,&c[],&c[]);
for(int i=;i<=n;i++) scanf("%d",&w[i]);
int ptr = ;
for(int i=;i<(<<n);i++){
if( C(i) ) mask[++ptr] = i;
}
const int INF = ;
fill(dp,dp+,INF);
dp[] = ;
for(int i=;i<=ptr;i++){
for(int j=(<<n)-;j>=;j--) if((mask[i]&j)==) {
dp[mask[i]|j] = min(dp[mask[i]|j],dp[j]+);
}
}
printf("Scenario #%d:\n%d\n\n",t,dp[(<<n)-]);
}
return ;
}
代码
[POJ 2923] Relocation (动态规划 状态压缩)的更多相关文章
- POJ 2923 Relocation (状态压缩,01背包)
题意:有n个(n<=10)物品,两辆车,装载量为c1和c2,每次两辆车可以运一些物品,一起走.但每辆车物品的总重量不能超过该车的容量.问最少要几次运完. 思路:由于n较小,可以用状态压缩来求解. ...
- POJ 2923 Relocation(01背包变形, 状态压缩DP)
Q: 如何判断几件物品能否被 2 辆车一次拉走? A: DP 问题. 先 dp 求解第一辆车能够装下的最大的重量, 然后计算剩下的重量之和是否小于第二辆车的 capacity, 若小于, 这 OK. ...
- POJ 1185 炮兵阵地(动态规划+状态压缩)
炮兵阵地 Description 司令部的将军们打算在N*M的网格地图上部署他们的炮兵部队.一个N*M的地图由N行M列组成,地图的每一格可能是山地(用"H" 表示),也可能是平原( ...
- poj 2923 Relocation 解题报告
题目链接:http://poj.org/problem?id=2923 题目意思:给出两部卡车能装的最大容量,还有n件物品的分别的weight.问以最优方式装入,最少能运送的次数是多少. 二进制表示物 ...
- POJ 3254. Corn Fields 状态压缩DP (入门级)
Corn Fields Time Limit: 2000MS Memory Limit: 65536K Total Submissions: 9806 Accepted: 5185 Descr ...
- POJ 3691 (AC自动机+状态压缩DP)
题目链接: http://poj.org/problem?id=3691 题目大意:给定N个致病DNA片段以及一个最终DNA片段.问最终DNA片段最少修改多少个字符,使得不包含任一致病DNA. 解题 ...
- POJ 1321 棋盘问题(状态压缩DP)
不总结的话, 同一个地方会 WA 到死 思路: 状态压缩 DP. 1. s 表示压缩状态, 若第 i 列放了棋子, 那么该列置 1, 否则该列置 0. 假如 s = 3(0x011) 那么表示棋盘的第 ...
- POJ 2046 Gap 搜索- 状态压缩
题目地址: http://poj.org/problem?id=2046 一道搜索状态压缩的题目,关键是怎样hash. AC代码: #include <iostream> #include ...
- POJ 3254 Corn Fields 状态压缩DP (C++/Java)
id=3254">http://poj.org/problem? id=3254 题目大意: 一个农民有n行m列的地方,每一个格子用1代表能够种草地,而0不能够.放牛仅仅能在有草地的. ...
随机推荐
- jquery的$.extend和$.fn.extend作用及区别.txt
jQuery为开发插件提拱了两个方法,分别是: jQuery.fn.extend(); jQuery.extend(); (1)类级别 类级别你可以理解为拓展jquery类,最明显的例子是$.ajax ...
- 解压jar
unzip EtnetChinaApplication.jar -d app进入临时目录app,编辑文件
- 08socket编程
有个SO_REUSEADDR值得注意一下: 服务器端尽可能使用SO_REUSEADDR 在绑定之前尽可能调用setsockopt来设置SO_REUSEADDR套接字选项. 使用SO_REUSEADDR ...
- HackerRank "Chocolate in Box" !
XOR -> 0 is the key (make it even pair): http://www.cnblogs.com/lautsie/p/3908006.html Something ...
- 清理SQL Server日志释放文件空间的终极方法
清理SQL Server日志释放文件空间的终极方法 转自:http://www.cnblogs.com/dudu/archive/2013/04/10/3011416.html [问题场景]有一个数 ...
- Python Paramiko模块
代码来自:http://www.cnblogs.com/wupeiqi/articles/4356675.html 今天学到了一个运维方面的利器:python的paramiko模块. paramiko ...
- Java的外部类和内部类+静态变量和非静态变量的组合关系
看的李刚<疯狂java讲义>,里面讲内部类的地方感觉有点散而且不全,看完之后还是不十分清楚到底怎么用,于是自己写了个程序测试了一下.看如下代码,即可知道外部类和内部类+静态成员和非静态成员 ...
- Python处理Excel文档(xlrd, xlwt, xlutils)
简介 xlrd,xlwt和xlutils是用Python处理Excel文档(*.xls)的高效率工具.其中,xlrd只能读取xls,xlwt只能新建xls(不可以修改),xlutils能将xlrd.B ...
- autotool相关:AC_ARG_ENABLE的用法
你可以使用AC_ARG_ENABLE来定义一个命令行选项.这个宏接受三个参数1.flag_base2.该选项的帮助说明3.当configure带该选项运行时所执行的代码,代码中的命令行变量enable ...
- Html4与Html5的关键区别
HTML5是下一代HTML标准版本,4与5有很多相同之处,有HTML从头构建,比4升级到5要方便. 以下是10个关键区别: 1.HTML5最近很火,但是标准还在制定,4则十年之多了,不会6变: 2.简 ...