【背包总结-输出所有方案】
来源:互联网 发布:mac上面怎么装office 编辑:程序博客网 时间:2024/05/22 06:43
#include <iostream>#include <cstring>#include <cmath>#include <queue>#include <stack>#include <list>#include <map>#include <set>#include <string>#include <cstdlib>#include <cstdio>#include <algorithm>using namespace std;int n,tot;const int N = 10;int dp[1010];int w[N],v[N];int p[1010][N];int output[N];void dfs(int idx,int s,int k){if(s <= 0){for(int i=k-1;i>=0;i--){cout << output[i] << " ";}cout << endl << endl;return;}if(p[s][idx] == 0){dfs(idx-1,s,k);}else if(p[s][idx] == 1){output[k] = idx;dfs(idx-1,s-w[idx],k+1);}else if(p[s][idx] == 2){output[k] = idx;dfs(idx-1,s-w[idx],k+1);dfs(idx-1,s,k);}}int main(){scanf("%d%d",&n,&tot);memset(dp,0,sizeof(dp));memset(p,-1,sizeof(p));for(int i=0;i<n;i++){scanf("%d%d",&w[i],&v[i]);}for(int i=0;i<n;i++){for(int j=tot;j>=w[i];j--){if(dp[j] > dp[j-w[i]]+v[i]){p[j][i] = 0;}else if(dp[j] < dp[j-w[i]] + v[i]){p[j][i] = 1;dp[j] = dp[j-w[i]] + v[i];}else{p[j][i] = 2;}}}cout << tot << endl;dfs(n-1,tot,0);//while(1);return 0;}
0 0
- 【背包总结-输出所有方案】
- 【背包总结】【输出方案总数】
- 背包问题--输出最优方案
- 输出字典序最小的背包方案
- 背包输出方案 Pro-Test Voting
- CD+uva+01背包(输出方案)
- 整数分解,输出所有分解方案
- 所有背包问题代码总结 C++
- 背包问题问法变化之---输出方案
- HDU 2126 Buy the souvenirs 01背包 输出方案数
- poj 1015 Jury Compromise 01背包+输出方案
- NYOJ 2126 Buy souvenirs(01背包+输出方案数)
- Uva-624 CD (需要输出方案的01背包)
- POJ 2400 KM最小权匹配+输出所有配对方案
- POJ 2400 KM最小权匹配+输出所有匹配方案
- 【背包总结】【输出最优解时候的最小数量】
- 【背包总结】【输出最优解时候的最小质量】
- 知识点:01背包(多种姿势:二维实现+一维实现+滚动数组实现+背包装满+输出最优方案)
- 黑马程序员——SQL四种连接查询及实例
- 【背包总结I】
- OpenGL像素缓冲对象(PBO)
- 【树结构】CodeForces 396C
- 8.3div
- 【背包总结-输出所有方案】
- 信号量、互斥体和自旋锁
- CSS+html:天涯网页仿照制作
- 递归算法实例
- 看书注意到的一个css选择器小知识点(积累)
- 【背包总结】【输出方案总数】
- 有关tomcat的安装与配置问题
- UIScrollView上面添加的uiftextfield如何失去第一响应者
- C++成员变量的初始化顺序问题