poj 2923 Relocation 解题报告
题目链接:http://poj.org/problem?id=2923
题目意思:给出两部卡车能装的最大容量,还有n件物品的分别的weight。问以最优方式装入,最少能运送的次数是多少。
二进制表示物品状态:0表示没运走,1表示已被运走。
枚举出两辆车一趟可以运出的状态。由于物品是一趟一趟运出来的。所以就可以由一个状态通过两辆车一趟的状态转移到另一个状态。
dp[i]=MIN(dp[k]+1)。k可以由两车一趟转移到i。
我是参考此人的:http://blog.csdn.net/bossup/article/details/9363845
状态压缩DP啊啊啊啊~~~~真神奇!!!!
#include <iostream>
#include <cstdio>
#include <cstdlib>
#include <cstring>
using namespace std; const int INF = 1e9;
const int maxn = + ;
int w[maxn];
int c1, c2, cnt, n;
int dp[<<], state[<<];
// dp[i]:状态为i时需要的最少趟数
// state[i]:两辆车一趟可以运的合理状态 void dfs(int num, int c1, int c2, int s) // s:每一次决策完的状态
{
if (num >= n) // n件物品全部决策完
{
if (!dp[s]) // 这个状态之前没试过
{
dp[s] = ;
state[cnt++] = s;
}
return;
}
if (c1 >= w[num])
dfs(num+, c1-w[num], c2, s|(<<num)); // 尝试装去第一部车上
if (c2 >= w[num])
dfs(num+, c1, c2-w[num], s|(<<num)); // 尝试装去第二部车上
dfs(num+, c1, c2, s); // 两车都不装
} int main()
{
int T, cas = ;
while (scanf("%d", &T) != EOF)
{
while (T--)
{
scanf("%d%d%d", &n, &c1, &c2);
for (int i = ; i < n; i++)
scanf("%d", &w[i]);
memset(dp, , sizeof(dp));
cnt = ;
dfs(, c1, c2, );
for (int i = ; i <= (<<n)-; i++)
dp[i] = (i == ? : INF);
// memset(dp, 0x3f, sizeof(dp));
// dp[0] = 0;
// printf("cnt = %d\n", cnt);
for (int i = ; i < (<<n); i++) // 枚举状态数
{
for (int j = ; j < cnt; j++)
{
if (i & state[j]) // 同一件物品被选了两次,有冲突(真厉害的操作啊~)
continue;
int newstate = i | state[j]; // 新的一个状态
dp[newstate] = min(dp[newstate], dp[i]+);
}
}
printf("Scenario #%d:\n%d\n", ++cas, dp[(<<n)-]);
if (T)
puts("");
}
}
return ;
}
poj 2923 Relocation 解题报告的更多相关文章
- POJ 2002 Squares 解题报告(哈希 开放寻址 & 链式)
经典好题. 题意是要我们找出所有的正方形.1000点,只有枚举咯. 如图,如果我们知道了正方形A,B的坐标,便可以推测出C,D两点的坐标.反之,遍历所有点作为A,B点,看C,D点是否存在.存在的话正方 ...
- [POJ 2923] Relocation (动态规划 状态压缩)
题目链接:http://poj.org/problem?id=2923 题目的大概意思是,有两辆车a和b,a车的最大承重为A,b车的最大承重为B.有n个家具需要从一个地方搬运到另一个地方,两辆车同时开 ...
- 【原创】poj ----- 1182 食物链 解题报告
题目地址: http://poj.org/problem?id=1182 题目内容: 食物链 Time Limit: 1000MS Memory Limit: 10000K Total Submi ...
- poj 2051.Argus 解题报告
题目链接:http://poj.org/problem?id=2051 题目意思:题目有点难理解,所以结合这幅图来说吧---- 有一个叫Argus的系统,该系统支持一个 Register 命令,输入就 ...
- poj 1102.LC-Display 解题报告
题目链接:http://poj.org/problem?id=1102 题目意思:就是根据给出的格式 s 和 数字 n,输出数值 n 的 LCD 显示.数值 n 的每个数字要占据 s + 2 列 和 ...
- poj 1363 Rails 解题报告
题目链接:http://poj.org/problem?id=1363 题意:有一列火车,车厢编号为1-n,从A方向进站,向B方向出站.现在进站顺序确定,给出一个出站的顺序,判断出站顺序是否合理. 实 ...
- POJ 1840 Eps 解题报告(哈希)
a1x13+ a2x23+ a3x33+ a4x43+ a5x53=0,xi∈[-50,50],且xi!=0.让我们求所有解的可能. 首先,如果暴力判断的话,每个x的取值有100种可能,100^5肯定 ...
- POJ 3159 Candies 解题报告(差分约束 Dijkstra+优先队列 SPFA+栈)
原题地址:http://poj.org/problem?id=3159 题意大概是班长发糖果,班里面有不良风气,A希望B的糖果不比自己多C个.班长要满足小朋友的需求,而且要让自己的糖果比snoopy的 ...
- POJ 2923 Relocation 装车问题 【状态压缩DP】+【01背包】
题目链接:https://vjudge.net/contest/103424#problem/I 转载于:>>>大牛博客 题目大意: 有 n 个货物,并且知道了每个货物的重量,每次用 ...
随机推荐
- KVM 存储虚拟化
KVM 的存储虚拟化是通过存储池(Storage Pool)和卷(Volume)来管理的. Storage Pool 是宿主机上可以看到的一片存储空间,可以是多种类型,后面会详细讨论.Volume 是 ...
- HDU 4920 Matrix multiplication(bitset优化)
题目链接 Matrix multiplication 求矩阵A和B相乘的结果. 因为答案只要对3取模,所以我们可以通过一些方法来加速计算. 我们对两个矩阵各开两个bitset,分别存储模3余1和模3余 ...
- Neo4j 第六篇:Cypher语法
Cypher是图形数据库查询语言事实上的标准. 一,Cypher类型系统 Cypher支持的类型系统分为三类:属性类型,复合类型和结构类型. 1,属性类型 属性类型:Integer.Float.Str ...
- CodeForces - 813C The Tag Game (树的dfs遍历)
[传送门]http://codeforces.com/problemset/problem/813/C [题目大意]两个人玩游戏,一个人跑一个人追,轮流决策,可以走也可以不走.给你一棵树,想要从某个结 ...
- Maven项目配置外部依赖(本地依赖)
加入有一些公共jar包只限于公司内部使用,不能暴露在外部时,有如下的方案: 1.搭建私有远程仓库(nexus) 2.使用http.ftp.共享地址,github地址等(主要是通过maven-deplo ...
- 使用Reveal 调试iOS应用程序
Itty Bitty Apps发布了一款实用工具——Reveal,它能够在运行时调试和修改iOS应用程序.Reveal能连接到应用程序,并允许开发者编辑各种用户界面参数,这反过来会立即反应在程序的UI ...
- cart树剪枝
当前子树的损失函数: $C_a(T) = C(T) + a|T|$, 其中$C(T)$为对训练数据的预测误差,$|T|$为树的叶子结点数目,反映模型的复杂度.对固定的$a$,一定存在使损失函数$C_a ...
- 数据库系统学习(八)-SQL语言与数据库完整性和安全性
第八讲 SQL语言与数据库完整性 重难点 数据库完整性的概念 关系数据库 防止和避免数据库中不合理数据的出现 输入错误,操作失误,程序处理错误等 完整性约束条件的一般形式 对O操作集合,当出现A情况时 ...
- uboot1.1.6中启动流程
U-Boot启动内核的过程可以分为两个阶段,两个阶段的功能如下: (1)第一阶段的功能 Ø 硬件设备初始化 Ø 加载U-Boot第二阶段代码到RAM空间 Ø 设置好栈 Ø 跳转到第二阶段代码入口 (2 ...
- return和exit
return从当前函数返回而exit结束正在运行的程序 示例: [wangml@iZwz976helaylvgqok97prZ testForC]$ ./exit.test q [wangml@iZw ...