VJP1071新年趣事之打牌(背包+输出路径)
2013-08-23 15:59
465 查看
简单的01背包 保存下方案总数 其实就是dp[v]值 输出路径dfs一下
View Code
#include <iostream> #include<cstdio> #include<cstring> #include<algorithm> #include<stdlib.h> using namespace std; int dp[100010],w[110],path[110],o,f[110],n; void dfs(int sw,int v) { int j; if(sw==0) { o = v; return ; } for(j = 1; j <= n ; j++) if(!f[j]&&dp[sw-w[j]]) { path[v] = j; f[j] = 1; dfs(sw-w[j],v+1); f[j] = 0; } } int main() { int i,j,tw; cin>>tw; cin>>n; for(i = 1; i <= n ; i++) cin>>w[i]; dp[0] = 1; for(i = 1 ; i <= n ;i++) for(j = tw ; j>=w[i] ; j--) { dp[j] += dp[j-w[i]]; } int sw = tw; if(dp[tw]==0) cout<<"0\n"; else if(dp[tw]>1) cout<<"-1\n"<<endl; else { dfs(sw,1); memset(f,0,sizeof(f)); int kk=0; for(i = 1; i < o ; i++) f[path[i]] = 1; for(i = 1; i <= n ;i++) { if(!f[i]) { if(kk) cout<<" "; cout<<i; kk++; } } puts(""); } return 0; }
View Code
相关文章推荐
- 新年趣事之打牌----VIJOS_1071----01背包加强版
- 新年趣事之打牌----VIJOS_1071----01背包加强版
- 新年趣事之打牌(01背包+记录路径)
- 新年趣事之打牌 记录路径+数量判断的01背包问题
- UVA 题目624 CD(01背包输出路径啊)
- 新年趣事之打牌
- vijos1071:新年趣事之打牌
- 新年趣事之打牌
- 1071.新年趣事之打牌
- 【动态规划】新年趣事之打牌
- L3-001. 凑零钱 (背包输出路径)
- poj 1787 Charlie's Change(背包问题输出路径)
- L3-001. 凑零钱(背包dp,输出路径)
- Vijos - P1071 新年趣事之打牌
- SGU 116. Index of super-prime(完全背包+输出路径)
- Vijos P1071新年趣事之打牌
- 新年趣事之打牌_DP
- SGU 116 筛素数+多重背包输出路径
- UVA 624CD(01背包输出 + 输出路径)
- Codeforces Round #436 (Div. 2) E. Fire(01背包+输出路径)