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个家具需要从一个地方搬运到另一个地方,两辆车同时开 ...
随机推荐
- MAVEN学习笔记之私服Nexus(2)
MAVEN学习笔记之私服Nexus(2) 私有服务器搭建 Nexus www.snatype.org下载 snatype-work 是默认nexus存储nexus a:将bin添加到环境中 Admin ...
- Android studio 隐藏toolbar上的app title
getSupportActionBar().setDisplayShowTitleEnabled(false);
- OpenCV_Python教程 系列!
这个是作者的总结系列!赞一个! 原文链接:http://blog.csdn.net/sunny2038/article/details/9057415 在python中使用OpenCV:http:// ...
- 优动漫PAINT漫画和插画方面软件特色
优动漫PAINT也就是我们常说的clip studio paint(CSP)的中文版本,它是一款功能强大的漫画.插画绘制软件,它搭载了绘制漫画和插画所需的所有功能,包括丰富的笔工具.超强的笔压感应和手 ...
- Java的编译与运行
编译: 是指将我们编写的Java源文件翻译成JVM认识的 .class 文件, 在这个过程中,javac 编译器会检查我们所写的程序是否有错误,有错误就会提示出来,如果没有错误就会编译成功. 运行: ...
- Intellij IDEA中Mybatis Mapper自动注入警告的6种解决方案
点关注,不迷路:持续更新Java架构相关技术及资讯热文!!! 相信使用Mybaits的小伙伴们一定会经常编写类似如下的代码: 可以看到 userMapper 下有个红色警告.虽然代码本身并没有问题,能 ...
- 2018秋招blibli算法工程师
我给出代码如下:和之前做数塔(dp的入门题目)的思路一致 dp[i][j]为走到坐标(i,j)的最小减速(只有向右走和向上走两种情况) #include<stdio.h> #include ...
- Everything Be True FreeCodeCamp
function every(collection, pre) { // Is everyone being true? for(var i in collection){ if(!collectio ...
- JS棋盘
有一个棋盘,有64个方格,在第一个方格里面放1粒芝麻重量是0.00001kg, 第二个里面放2粒,第三个里面放4,棋盘上放的所有芝麻的重量 <!DOCTYPE html> <html ...
- 路飞学城Python-Day117
jango用户登录界面 """ Django settings for cnblog project. Generated by 'django-admin startp ...