Description

Emma and Eric are moving to their new house they bought after returning from their honeymoon. Fortunately, they have a few friends helping them relocate. To move the furniture, they only have two compact cars, which complicates everything a bit. Since the
furniture does not fit into the cars, Eric wants to put them on top of the cars. However, both cars only support a certain weight on their roof, so they will have to do several trips to transport everything. The schedule for the move is planed like this:

  1. At their old place, they will put furniture on both cars.
  2. Then, they will drive to their new place with the two cars and carry the furniture upstairs.
  3. Finally, everybody will return to their old place and the process continues until everything is moved to the new place.

Note, that the group is always staying together so that they can have more fun and nobody feels lonely. Since the distance between the houses is quite large, Eric wants to make as few trips as possible.

Given the weights wi of each individual piece of furniture and the capacities C1 and C2 of the two cars, how many trips to the new house does the party have to make to move all the furniture? If
a car has capacity C, the sum of the weights of all the furniture it loads for one trip can be at most C.

Input

The first line contains the number of scenarios. Each scenario consists of one line containing three numbers nC1 and C2C1 and C2 are the capacities of the cars (1
≤ Ci ≤ 100) and n is the number of pieces of furniture (1 ≤ n ≤ 10). The following line will contain n integers w1, …, wn, the weights of the furniture (1 ≤ wi ≤
100). It is guaranteed that each piece of furniture can be loaded by at least one of the two cars.

Output

The output for every scenario begins with a line containing “Scenario #i:”, where i is the number of the scenario starting at 1. Then print a single line with the number of trips to the new house they have to make to move
all the furniture. Terminate each scenario with a blank line.

Sample Input

2
6 12 13
3 9 13 3 10 11
7 1 100
1 2 33 50 50 67 98

Sample Output

Scenario #1:
2 Scenario #2:

3

这道题是用状态压缩+01背包,因为物品只有10件,所以会想到状压dp,先把所有的物品都用0和1表示,0表示物品还没有被搬走,1表示已经被搬走,用dp[state]记录从所有物品都未被搬走到状态state所要搬的最少次数。可以先算出哪些状态是一次就能搬走的,这里要用到01背包的思想,先看看该状态下c1可以容纳多少重量,然后用看看把这些重量搬走后剩下的质量能不能被c2所容纳。这些都处理完后,就用状态转移方程dp[j|state]=min(dp[j|state,dp[state]+1},这个方程很巧妙啊,开始还以为是两个能一次搬走的状态结合,其实是利用能一次搬走,所以在之前的基础上加上这个一次能搬走的状态。最后的结果就是dp[1<<(n-1)]啦。

#include<stdio.h>
#include<string.h>
#define inf 88888888
int c1,c2,n,w[15],state,yici[1500],vis[150],dp[1500];
int min(int x,int y){
return x<y?x:y;
}
int panduan(int x)
{
int i,j,sum=0;
memset(vis,0,sizeof(vis));
vis[0]=1;
for(i=1;i<=n;i++){
if((1<<(i-1))&x){
sum+=w[i];
for(j=c1;j>=w[i];j--){
if(vis[j-w[i]]){
vis[j]++;
}
}
}
}
if(sum>c1+c2)return 0;
for(i=0;i<=c1;i++){
if(vis[i] && sum-i<=c2)return 1;
}
return 0;
} int main()
{
int m,i,j,T,t,num1=0;
scanf("%d",&T);
while(T--)
{
scanf("%d%d%d",&n,&c1,&c2);
for(i=1;i<=n;i++){
scanf("%d",&w[i]);
}
t=0;
memset(yici,0,sizeof(yici));
for(i=1;i<(1<<n);i++){
dp[i]=inf;
if(panduan(i)){
yici[++t]=i;
dp[i]=1;
}
}
dp[0]=0;
for(i=1;i<(1<<n);i++){
for(j=1;j<=t;j++){
if(yici[j]&i)continue;
dp[i|yici[j]]=min(dp[i|yici[j]],dp[i]+1);
}
}
num1++;
printf("Scenario #%d:\n",num1);
printf("%d\n\n",dp[(1<<n)-1]);
}
return 0;
}

poj2923 Relocation的更多相关文章

  1. Relocation POJ-2923

    题目链接 题目意思: 有 n 个货物,并且知道了每个货物的重量,每次用载重量分别为c1,c2的火车装载,问最少需要运送多少次可以将货物运完. 分析:本题可以用二进制枚举所有不冲突的方案,再来dp 一下 ...

  2. [poj2923]Relocation_状压dp_01背包

    Relocation poj-2923 题目大意:给出n个物品,有两辆车,两辆车必须一起出动并且每辆车有单独的容量.问最少需要运输多少次才能运走所有货物. 注释:n<=10,容量,物品代价< ...

  3. relocation 错误

    icc test/train/test_lm2.o -shared -lpthread -ldl ./lib/liblm2.a -o liblm2.so ld: ./lib/liblm2.a(cJSO ...

  4. ffmpeg relocation error

    在向imx6移植ffmpeg后,一般的编解码操作没有问题,但是当从摄像头录视频时, ffmpeg -f video4linux2 -s 640*480 -r 10 -i /dev/video0 tes ...

  5. rac one node在线relocation

    1.查看数据库运行状态 $ srvctl status database -d rone Instance rone_2 is running on node rone2 Online relocat ...

  6. uboot的relocation原理具体分析

    近期在一直在做uboot的移植工作,uboot中有非常多值得学习的东西.之前总结过uboot的启动流程,但uboot一个非常核心的功能没有细致研究.就是uboot的relocation功能. 这几天研 ...

  7. Relocation 状态压缩DP

     Relocation Time Limit:1000MS     Memory Limit:65536KB     64bit IO Format:%I64d & %I64u Submit  ...

  8. SVN报E155024: Invalid relocation destination

    大家开发过程会遇到一个场景! 我们在使用SVN版本管理工具进行开发的过程中,前一个版本在Branch->201803 分支开发完成之后,后一版本要求在Branch->201804版本开发 ...

  9. POJ-2923 Relocation---01背包+状态压缩

    题目链接: https://vjudge.net/problem/POJ-2923 题目大意: 有n个货物,给出每个货物的重量,每次用容量为c1,c2的火车运输,问最少需要运送多少次可以将货物运完 思 ...

随机推荐

  1. 【Oracle】delete表后commit后怎么找回,方法

    有些时候,不小心删除了一些需要的表,而且数据库不能停止,只能一直运行下去,这样的话很麻烦 下面介绍的方法就是删除表后通过时间戳后者scn找回删除的数据 模拟实验环境: 创建一个新表 SQL> c ...

  2. Zabbix监控虚拟机服务-告警与自动恢复

    今天稍微空闲,使用下zabbix的5.0版本,目前生产环境是4.x版本 今天就只实现一个目的:监控任意一个服务(示例中监控的是docker.service),如果服务挂了,自动给恢复,先看一个动图 搭 ...

  3. Junit测试和反射

    Junit单元测试 测试分类 黑盒测试:不需要写代码,给输入值,看程序能否得到输出期望值. 白盒测试:需要些代码,关注程序具体的执行流程. Junit的使用 步骤 定义一个测试类(测试用例). 定义测 ...

  4. python工业互联网应用实战3—Django Admin列表

    Django Admin笔者使用下来可以说是Django框架的开发利器,业务model构建完成后,我们就能快速的构建一个增删查改的后台管理框架.对于大量的企业管理业务开发来说,可以快速的构建一个可发布 ...

  5. 在线配置热加载配置 go-kratos.dev 监听key

    paladin https://v1.go-kratos.dev/#/config-paladin example Service(在线配置热加载配置) # service.go type Servi ...

  6. nginx proxy pass redirects ignore port

    nginx proxy pass redirects ignore port $host in this order of precedence: host name from the request ...

  7. 从零开始学Java (四)输入输出

    这块内容对于有基础的人没啥好说的... 1 System.out.print("C"); 2 System.out.println(); 上边和下边等价 1 System.out. ...

  8. 一次SQL盲注记录

    背景:遇到一个sql注入,数字型布尔盲注+waf(直接超时那种),只要能出用户名,数据库名即可. 解决办法: 因为可以只要能出user(),database()即可,所以用不着SELECT,那么问题就 ...

  9. Java网络基础

    本来主要是讲自己在网络编程方面的学习总结,里面主要讲计算网络的基础.TCP的通信协议,还有些简单的案例.下面是我学习的一个简单路线, 一.概述 计算机网络是将不同地理位置的具有独立功能的多台计算机及其 ...

  10. (二)基于Netty的高性能Websocket服务器(netty-websocket-spring-boot)

    @toc Netty是一款基于NIO(Nonblocking I/O,非阻塞IO)开发的网络通信框架,对比于BIO(Blocking I/O,阻塞IO),他的并发性能得到了很大提高. 1.Netty为 ...