题目链接: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 解题报告的更多相关文章

  1. POJ 2002 Squares 解题报告(哈希 开放寻址 & 链式)

    经典好题. 题意是要我们找出所有的正方形.1000点,只有枚举咯. 如图,如果我们知道了正方形A,B的坐标,便可以推测出C,D两点的坐标.反之,遍历所有点作为A,B点,看C,D点是否存在.存在的话正方 ...

  2. [POJ 2923] Relocation (动态规划 状态压缩)

    题目链接:http://poj.org/problem?id=2923 题目的大概意思是,有两辆车a和b,a车的最大承重为A,b车的最大承重为B.有n个家具需要从一个地方搬运到另一个地方,两辆车同时开 ...

  3. 【原创】poj ----- 1182 食物链 解题报告

    题目地址: http://poj.org/problem?id=1182 题目内容: 食物链 Time Limit: 1000MS   Memory Limit: 10000K Total Submi ...

  4. poj 2051.Argus 解题报告

    题目链接:http://poj.org/problem?id=2051 题目意思:题目有点难理解,所以结合这幅图来说吧---- 有一个叫Argus的系统,该系统支持一个 Register 命令,输入就 ...

  5. poj 1102.LC-Display 解题报告

    题目链接:http://poj.org/problem?id=1102 题目意思:就是根据给出的格式 s 和 数字 n,输出数值 n 的 LCD 显示.数值 n 的每个数字要占据 s + 2 列 和 ...

  6. poj 1363 Rails 解题报告

    题目链接:http://poj.org/problem?id=1363 题意:有一列火车,车厢编号为1-n,从A方向进站,向B方向出站.现在进站顺序确定,给出一个出站的顺序,判断出站顺序是否合理. 实 ...

  7. POJ 1840 Eps 解题报告(哈希)

    a1x13+ a2x23+ a3x33+ a4x43+ a5x53=0,xi∈[-50,50],且xi!=0.让我们求所有解的可能. 首先,如果暴力判断的话,每个x的取值有100种可能,100^5肯定 ...

  8. POJ 3159 Candies 解题报告(差分约束 Dijkstra+优先队列 SPFA+栈)

    原题地址:http://poj.org/problem?id=3159 题意大概是班长发糖果,班里面有不良风气,A希望B的糖果不比自己多C个.班长要满足小朋友的需求,而且要让自己的糖果比snoopy的 ...

  9. POJ 2923 Relocation 装车问题 【状态压缩DP】+【01背包】

    题目链接:https://vjudge.net/contest/103424#problem/I 转载于:>>>大牛博客 题目大意: 有 n 个货物,并且知道了每个货物的重量,每次用 ...

随机推荐

  1. @Java Web 程序员,我们一起给程序开个后门吧:让你在保留现场,服务不重启的情况下,执行我们的调试代码

    一.前言 这篇算是类加载器的实战第五篇,前面几篇在这里,后续会持续写这方面的一些东西. 实战分析Tomcat的类加载器结构(使用Eclipse MAT验证) 还是Tomcat,关于类加载器的趣味实验 ...

  2. Android网络编程之HttpClient运用

    Android网络编程之HttpClient运用 在 Android开发中我们经常会用到网络连接功能与服务器进行数据的交互,为此Android的SDK提供了Apache的HttpClient来方便我们 ...

  3. android 布局之LinearLayout(学习一)

    一,View localView = mRadioGroup_content.getChildAt(i);指定自定义菜单栏的点击格,如child3 其中:mRadioGroup_content = ( ...

  4. hdu 3594 Cactus /uva 10510 仙人掌图判定

    仙人掌图(有向):同时满足:1强连通:2任何边不在俩个环中. 个人理解:其实就是环之间相连,两两只有一个公共点,(其实可以缩块),那个公共点是割点.HDU数据弱,网上很多错误代码和解法也可以过. 个人 ...

  5. ffmpeg 时间戳

    转http://blog.csdn.net/yfh1985sdq/article/details/5721953 AVpacket里的时间戳pts和dts.单位好像是us. 问 : 时间戳pts和dt ...

  6. mybatis注解@selectKey对于db2数据库的使用

    在新增时返回当前新增的主键. 数据库:DB2 用的是mybatis的@selectKey 代码: @InsertProvider(type = Test.class,method="inse ...

  7. RED HAT 7 性能监控工具

    https://access.redhat.com/documentation/zh-CN/Red_Hat_Enterprise_Linux/7/html/Performance_Tuning_Gui ...

  8. Intent传递简单对象与集合

    我们在Intent传递传递对象.能够有三种方式,实现Serializable接口.实现Parcelable接口,使用json格式序列化与反序列化. 在此我们使用第二方式,现实Parcelable接口, ...

  9. SolidEdge如何为零件指定不同的颜色 给零件着色 给装配体着色

    格式-零件画笔 可以给零件的一个表面,或者一个特征着色   如果要指定不同的色彩,可以在格式-样式-面样式中修改   如果是给装配体着色,则点击任意零件,在"无"的选项卡里面修改颜 ...

  10. HDU 4902 Nice boat 线段树+离线

    据说暴力也过了.还傻逼地写了这么长. . . #include <stdio.h> #include <string.h> #include <math.h> #i ...