UVa - 624 - CD(0-1 + 记录路径)
2016-10-17 22:46
387 查看
题目链接:https://uva.onlinejudge.org/index.php?option=com_onlinejudge&Itemid=8&page=show_problem&problem=565
题目大意:有一些CD,根据自己的喜欢,每个CD上都有自己的歌曲,并给出了时间,问在车程时间为N分钟最多能听多少分钟自己喜欢的歌曲
解析: 0-1背包,用数组记录下路径即可
代码如下:
题目大意:有一些CD,根据自己的喜欢,每个CD上都有自己的歌曲,并给出了时间,问在车程时间为N分钟最多能听多少分钟自己喜欢的歌曲
解析: 0-1背包,用数组记录下路径即可
代码如下:
#include<iostream> #include<algorithm> #include<map> #include<stack> #include<queue> #include<vector> #include<set> #include<string> #include<cstdio> #include<cstring> #include<cctype> #include<cmath> #define N 10001 using namespace std; const int inf = 1e9; const int mod = 1<<30; const double eps = 1e-8; const double pi = acos(-1.0); typedef long long LL; int a , dp , vis [30]; int main() { int v, n, i, j; while(~scanf("%d%d", &v, &n)) { for(i = 1; i <= n; i++) scanf("%d", &a[i]); memset(dp, 0, sizeof(dp)); memset(vis, 0, sizeof(vis)); for(i = 1; i <= n; i++) { for(j = v; j >= a[i]; j--) { if(dp[j] < dp[j - a[i]] + a[i]) { dp[j] = dp[j - a[i]] + a[i]; vis[j][i] = 1; } } } for(i = n, j = v; i >= 1; i--) { if(vis[j][i]) { printf("%d ", a[i]); j -= a[i]; } } printf("sum:%d\n", dp[v]); } return 0; }
相关文章推荐
- UVA 624 CD(01背包/记录路径)
- Uva624 CD (记录路径)
- 【DP】UVA 624 CD 记录路径
- 【uva】624 CD【背包记录路径】
- uva 624 CD(01背包 路径记录)
- 【DP】UVA 624 CD 记录路径
- CD - UVa 624 01背包记录路径
- 【DP】UVA 624 CD 记录路径
- UVA 624 CD (01背包+打印路径 或 dfs+记录路径)
- uva 624 CD(记录路径)
- UVA 624 CD(01背包+记录路径)
- UVA 624 CD(01背包,要记录路径)
- uva 624 CD 01背包打印路径
- UVa 624 CD(01背包 需要记录最优解的任一方案)
- UVA 题目624 CD(01背包输出路径啊)
- UVA 624(01背包记录路径)
- uva624 CD (01背包+路径的输出)
- UVA 624 - CD (01背包打印路径)
- UVA 624 CD 【记录路径式的01背包】
- UVA 624 CD (记录背包)