1.简单题意
这是一个典型的背包问题,就是一个学院要分开,有不同的价值的设备,需要分给两个学院,尽量公平
2.解题思路
我们需要将总和平分,然后就是一个很正常的01背包问题,套入公式就可
3.感想
问题不可能很简单的套公式,我们可以对其进行转化,然后再解
4.ac代码
#include <stdio.h>
#include <string.h>
#include<iostream>
#include <algorithm>
using namespace std;
int val[5005];
int dp[255555];
int main()
{
int n, i, j, a, b, l, sum;
while (cin>>n, n>0)
{
memset(val, 0, sizeof(val));
memset(dp, 0, sizeof(dp));
l = 0;
sum = 0;
for (i = 0; i<n; i++)
{
cin >> a >> b;
while (b--)
{
val[l++] = a;
sum += a;
}
}
for (i = 0; i<l; i++)
{
for (j = sum / 2; j >= val[i]; j--)
{
dp[j] = max(dp[j], dp[j - val[i]] + val[i]);
}
}
cout << sum - dp[sum / 2] << " " << dp[sum / 2]<<endl;
}
system("pause");
return 0;
}