poj2923(状态压缩dp)
来源:互联网 发布:淘宝无锡电动车怎么样 编辑:程序博客网 时间:2024/06/01 20:39
链接:点击打开链接
题意:有n个货物,给出每个货物的重量,每次用容量为c1,c2的火车运输,问最少需要运送多少次可以将货物运完
代码:
#include <stdio.h>#include <string.h>#include <stdlib.h>#include <iostream>#include <algorithm>using namespace std;const int INF=0x3f3f3f3f;int n,c1,c2;int w[15],v[105],dp[(1<<10)+5],tmp[(1<<10)+5];int judge(int s){ int i,j,sum; sum=0; memset(v,0,sizeof(v)); v[0]=1; for(i=0;i<n;i++) if((1<<i)&s){ sum+=w[i]; if(sum>c1+c2) return 0; for(j=c1;j>=w[i];j--) if(v[j-w[i]]) v[j]=1; } for(i=0;i<=c1;i++) if(v[i]&&sum-i<=c2) return 1; return 0;}int main(){ int t,i,j,k,cas; cas=1; scanf("%d",&t); while(t--){ k=0; scanf("%d%d%d",&n,&c1,&c2); for(i=0;i<n;i++) scanf("%d",&w[i]); for(i=1;i<(1<<n);i++) if(judge(i)) //判断每个状态的体积能不能一次运走 tmp[k++]=i; memset(dp,INF,sizeof(dp)); dp[0]=0; for(i=0;i<k;i++) for(j=(1<<n)-1;j>=0;j--){ //以每个状态为体积,价值为1,进行01背包 if(tmp[i]&j) continue; if(dp[j]!=INF) dp[j|tmp[i]]=min(dp[j|tmp[i]],dp[j]+1); } printf("Scenario #%d:\n%d\n\n",cas++,dp[(1<<n)-1]); } return 0;}
0 0
- poj2923(状态压缩dp)
- poj2923 状态压缩背包dp
- poj2923 01背包+状态压缩dp
- POJ2923:Relocation(状态压缩dp)
- POJ2923:Relocation(状态压缩+01)
- poj2923(状态压缩+01背包)
- poj2923 Relocation (01背包+状态压缩)
- poj2923 Relocation(状态压缩+背包)
- poj2923 Relocation(状态压缩+01背包)
- poj2923 Relocation(压缩dp+01背包)
- 【DP】poj2923
- POJ2923 Relocation (DP)
- 状态压缩dp
- pku1038状态压缩dp
- 状态压缩DP 入门
- HDU1074 状态压缩DP
- Poj3254 状态压缩DP
- 状态压缩DP入门
- 一款开源的Android图片搜索APP
- 常见UI界面库
- makefile中重载与取消隐藏规则示例
- 【组合控件】android自定义控件之带文字的ImageView
- hue中使用oozie的workflow执行mr
- poj2923(状态压缩dp)
- 树莓派磁盘扩容
- CodeChef Arithmetic Progressions (分块FFT)
- 2659: [Beijing wc2012]算不出的算式|找规律
- poj 1502 MPI Maelstrom
- 写在结婚纪念日
- 为Web开发者准备的10个最新工具
- java中间缓存变量机制
- js判断浏览器是否有滚动条