hdu 1171 Big Event in HDU(多重背包可行性)
2017-08-15 22:11
417 查看
总价值的一半为背包容量,可以多重背包,可以转成完全背包
#include <bits/stdc++.h> using namespace std; const int MAXN = 10000; int num[MAXN]; int dp[MAXN*100]; int v[MAXN]; int n,sum,W; int main() { ios::sync_with_stdio(false); while(cin >> n && n > 0) { sum = 0; memset(dp,0,sizeof(dp)); for(int i = 0; i < n; ++i) { cin >> v[i] >> num[i]; sum += v[i]*num[i]; } W = sum/2; int res = 0; for(int i = 0; i < n; ++i) { if(v[i]*num[i] >= W) { for(int j = v[i]; j <= W; ++j) { dp[j] = max(dp[j],dp[j-v[i]]+v[i]); res = max(res,dp[j]); } } else { int temp = num[i]; for(int k = 1; k <= num[i]; k *= 2) { for(int j = W; j >= k*v[i]; --j) { dp[j] = max(dp[j],dp[j-k*v[i]]+k*v[i]); res = max(dp[j],res); } temp -= k; } if(temp) { for(int j = W; j >= temp*v[i]; --j) { dp[j] = max(dp[j],dp[j-temp*v[i]]+temp*v[i]); res = max(dp[j],res); } } } } cout << max(res,sum-res) << " " << min(res,sum-res) << endl; } return 0; }
相关文章推荐
- hdu 1171 Big Event in HDU 费用可行性背包 dp
- hdu 1171 Big Event in HDU(多重背包可行性)
- HDU 1171 Big Event in HDU(多重背包)
- HDOJ 1171 Big Event in HDU (多重背包) / (母函数)
- HDU-1171 Big Event in HDU (多重背包)
- HDU 1171 Big Event in HDU (多重背包,可转换为01背包)+对于背包的一点认识 4000
- hdu 1171 Big Event in HDU(多重背包+二进制优化)
- HDU 1171 Big Event in HDU(多重背包)
- hdu 1171 Big Event in HDU(多重背包)
- HDU 1171 Big Event in HDU (多重背包)
- HDU 1171 Big Event in HDU……(01背包 + 思维)
- HDU 1171 Big Event in HDU (单调队列优化多重背包)
- 杭电1171 Big Event in HDU(母函数+多重背包解法)
- hdu 1171 Big Event in HDU (多重背包)
- hdoj 1171 Big Event in HDU(背包dp+母函数)
- HDU 1171 Big Event in HDU(多重背包)
- hdu 1171 Big Event in HDU(背包DP)
- hdu 1171 Big Event in HDU(01背包变形)
- HDU 1171 Big Event In HDU 背包拆分
- [HDU 1171]Big Event in HDU 母函数或多重背包