POJ 2923 状态压缩
来源:互联网 发布:php json转数组 编辑:程序博客网 时间:2024/05/23 00:42
这题不难,但过得人不多啊,POJ才不到600人过。。。。做的时候也比较顺利,仅仅PE了一次。
题意,有两辆车,容量分别为V1,V2,每次要运一定的物品到新家,经过几次后,把所有物品都运到新家,问最少用多少次。
N<=10,ok,铁定的状态压缩。
看起来不难,但想起来总感觉有点乱。想了半天才知道咋做。
首先预处理,分别搞出两辆车一次性可装的物品的状态。
接下来用f[i][x]表示第一辆车经过第i次的装运(可以小于i),能不能收集状态为x的物品组合。另一辆车类似的表示为g[i][x]
如果有满足f[i][x]和g[i][~x]均为真时,就找到了最小的i,也就是找到了答案。
另外,物品最好用a[0]来作为起点,这样初始化时比较方便。
附代码:
#include <iostream>#include <cstdio>#include <cstdlib>#include <cstring>#include <cmath>#include <vector>#define N 11#define M 1100#define u (1<<n)#define cl(a) memset(a,0,sizeof(a)) #define ss(a) scanf("%d",&a)#define pb push_backusing namespace std;int f[N][M],g[N][M],a[N];int v1,v2,n;vector<int>f1,g1; void inital(int i,int w,int v){ if (i==n) { if (v<=v1) f1.pb(w); if (v<=v2) g1.pb(w); return; } inital(i+1,w,v); inital(i+1,w+(1<<i),v+a[i]);} int check(int k){ int i; for (i=0;i<u;i++) if (f[k][i]&&g[k][u-1-i]) return 1; return 0;}void start(){ cl(f);cl(g); f1.clear();g1.clear();}int main(){ int T,i,j,k,cas; ss(T); for (cas=1;cas<=T;cas++) { ss(n); ss(v1);ss(v2); for (i=0;i<n;i++) ss(a[i]); start(); printf("Scenario #%d: \n",cas); inital(0,0,0); for (i=0;i<f1.size();i++) f[1][f1[i]]=1; for (i=0;i<g1.size();i++) g[1][g1[i]]=1; if (!check(1)) { i=2; while (i<=n) { for (k=0;k<f1.size();k++) { int t=f1[k]; for (j=t;j<u;j++) { if ((j&t)==t&&f[i-1][j-t]) f[i][j]=1; } } for (k=0;k<g1.size();k++) { int t=g1[k]; for (j=t;j<u;j++) { if ((j&t)==t&&g[i-1][j-t]) g[i][j]=1; } } if (check(i)) { cout<<i<<endl; break; } i++; } } else cout<<1<<endl; cout<<endl; } return 0;}
- POJ 2923 状态压缩
- poj 2923 Relocation 状态压缩
- POJ 2923(dp + 状态压缩)
- poj 2923 状态压缩dp
- poj 2923 Relocation(状态压缩+01背包)
- poj 2923 状态压缩 + 01背包
- poj 2923 Relocation 状态压缩01背包
- poj 2923 状态压缩,01背包
- poj 2923 Relocation 状态压缩+01背包
- POJ 2923 Relocation / 状态压缩DP
- POJ 2923 - Relocation(状态压缩+01背包)
- POJ 2923 Relocation(状态压缩+01背包)
- POJ 2923 Relocation(状态压缩+ 01背包)
- 状态压缩DP——POJ 2923
- POJ - 2923 Relocation(BFS+状态压缩)
- Poj 2923 Relocation(状态压缩+动态规划)
- POJ 2923Relocation(状态压缩入门)
- POJ 2923 Relocation (状态压缩+背包)
- Cocos2d-x 2.0.4 小心隐藏的retain
- Daily-C-Study(1):C语言typedef关键字
- mysql sql语句大全
- 好博客搜集
- nginx安装
- POJ 2923 状态压缩
- Jackson 框架,轻易转换JSON
- MFC控件的绘制与响应顺序——ZOrder
- ubuntu下安装flashplayer陷入软件无法卸载和无法安装的处理方法
- 漂亮,美观的图表之Matlab强势回归~~~~走你7
- JSTL JSP标准标签库(一)
- 淘宝流量三段论之二:导购好生意
- MFC使用双栈实现简单计算器
- JavaSevice 实现java程序注册成Windows服务