poj1293 DP背包
来源:互联网 发布:葫芦娃桌面软件 编辑:程序博客网 时间:2024/05/22 04:35
两种物品,放到n个盒子,要求所有盒子放满,且每个盒子只有一种物品,物品可以有剩余
解法:将盒子视为物品,第一种物品为背包大小,进行DP并且记录路径,回溯可得放第一种物品的最优方案(目的是为了是放第二种物品的盒子总容积尽可能小),最后在判断一下就行了。
#include <iostream>using namespace std;int M,L,c[1010],dp[1010],n,pre[1010],sum,ans;bool v[1010];void dfs(int j) { if (j==0) return; v[pre[j]] = 0; dfs(j-c[pre[j]]);}int main() { while (scanf("%d%d",&M,&L)) { if (M==0 && L==0) break; scanf("%d",&n); for (int i=1;i<=n;i++) { scanf("%d",&c[i]); v[i] = 1; } memset(dp,0,sizeof(dp)); for (int i=1;i<=n;i++) for (int j=M;j>=c[i];j--) if (dp[j]<dp[j-c[i]]+c[i]) { dp[j] = dp[j-c[i]]+c[i]; pre[j] = i; } dfs(dp[M]); sum = 0; ans = n; for (int i=1;i<=n;i++) if (v[i]==1) { sum += c[i]; ans--; } if (sum<=L) { printf("%d",ans); for (int i=1;i<=n;i++) if (v[i]==0) printf(" %d",i); printf("\n"); } else printf("Impossible to distribute\n"); } return 0;}
- poj1293 DP背包
- 2011.12.26 POJ1293 转化为01背包来做
- DP背包
- 背包 dp
- 背包dp
- 背包dp
- DP-背包
- 背包dp
- 背包dp
- 背包dp
- DP 背包问题 01背包
- 背包dp之二维背包
- 背包dp之分组背包
- 背包dp之多重背包
- bzoj1296(dp套背包dp)
- HDU2126 扩展背包 DP
- PKU1157 01背包 DP
- HDU1248 完全背包 DP
- IBUS输入法安装和设置
- 黑马程序员__网络编程
- Linux设备驱动编程模型之设备篇
- 这个寒假收获颇丰
- Eclipse中连接Oracle
- poj1293 DP背包
- 如何将Oracle11g备份导入到10g
- Yahoo!团队实践分享:网站性能优化的34条黄金守则(转)
- 教你如何轻松打开玻璃瓶的金属盖
- 计算某天是一年中的第几天 很经典
- 在网页中添加百度分享功能
- 设备驱动主要数据结构
- 如何提高C++效率
- 高性能网站性能优化与系统架构