标签:absolute text namespace com art data owa script nes
2 10 1 20 1 3 10 1 20 2 30 1 -1
20 10 40 40
题意 把一堆东西尽量分为两份 第一份不小于第二份
把全部东西的总价值s除以2 让它装尽量多的东西作为第二份 剩下的就是第一份了
题目有个小坑点 是以负数作为结束条件的 不是-1 还有不要開始把s/=2 后来第一份又用s*2-d[s] 由于s/2*2不一定等于s了
<span style="font-family:Arial Black;">#include<cstdio> #include<cstring> #include<algorithm> using namespace std; const int N = 55, V = 255000; int d[V], val[N], num[N]; int main() { int n; while (scanf ("%d", &n),n>0) { int s = 0; memset(d,0,sizeof(d)); for (int i = 1; i <= n; ++i) { scanf ("%d%d", &val[i], &num[i]); s += val[i] * num[i]; } for (int i = 1; i <= n; ++i) { for (int k = 1; k<=num[i]; k *=2) { num[i] -= k; for (int j = s / 2; j >= k * val[i]; --j) d[j] = max (d[j], d[j - k * val[i]] + k * val[i]); } if (num[i] != 0) for (int j = s / 2; j >= num[i] * val[i]; --j) d[j] = max (d[j], d[j - num[i] * val[i]] + num[i] * val[i]); } printf ("%d %d\n", s - d[s/2], d[s/2]); } return 0; } </span>
HDU 1171 Big Event in HDU(多重背包)
标签:absolute text namespace com art data owa script nes
原文地址:http://www.cnblogs.com/brucemengbm/p/6905772.html