UVA 12563(Jin Ge Jin Qu hao)
Posted
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了UVA 12563(Jin Ge Jin Qu hao)相关的知识,希望对你有一定的参考价值。
开始认真学DP。我对滚动数组的理解是:后一个状态可以由前一个状态求得,便可以使用一维数组重复利用节省空间复杂度。
这个题要注意题目要求的前提,求次数可以看作重量为v[i]价值为1放入w-1的背包,歌曲就是重量和价值都是v[i],简单的转化。
#include <iostream> #include <bits/stdc++.h> using namespace std; const int maxn = 100000+10; int dp[maxn]; int v[maxn]; int cnt[maxn]; int main() { int t; cin >> t; int kase = 0; while(t--) { int n,w; cin >> n >> w; for(int i = 1 ; i <= n ; i ++) cin >> v[i]; printf("Case %d:",++kase); memset(dp,0,sizeof(dp)); memset(cnt,0,sizeof(cnt)); for(int i = 1 ; i <= n ; i++) { for(int j = w-1 ; j >= v[i] ; j--) { if(cnt[j] < cnt[j - v[i]]+1) { dp[j] = dp[j-v[i]]+v[i]; cnt[j] = cnt[j-v[i]]+1; } else if(cnt[j] == cnt[j-v[i]]+1) dp[j] = max(dp[j],dp[j-v[i]]+v[i]); } } cout << " " << cnt[w-1]+1 << " " << dp[w-1]+678 << endl; } return 0; }
以上是关于UVA 12563(Jin Ge Jin Qu hao)的主要内容,如果未能解决你的问题,请参考以下文章
UVA 12563 "Jin Ge Jin Qu hao" (背包)
UVA12563Jin Ge Jin Qu hao(01背包)