#include<stdio.h>
#include<string.h>
#include<iostream>
#include<algorithm>
using namespace std;
int dp[
500000];
int value[
1005];
int number[
1005];
int MidSum;
int Sum;
int i;
void Complete()
{
int j;
for(j=
value[i];j<=MidSum;j++)
dp[j]=max(dp[j],dp[j-
value[i]]+
value[i]);
}
void Mutiple()
{
int j,k;
for(j=
1;j<=number[i];j++)
for(k=MidSum;k>=
value[i];k--)
dp[k]=max(dp[k],dp[k-
value[i]]+
value[i]);
}
int main()
{
int N;
while(scanf(
"%d",&N))
{
memset(dp,
0,
sizeof(dp));
Sum=
0;
if(N<
0)
return 0;
for(i=
1;i<=N;i++)
{
scanf(
"%d%d",&
value[i],&number[i]);
Sum+=
value[i]*number[i];
}
MidSum=Sum/
2;
for(i=
1;i<=N;i++)
{
if(
value[i]*number[i]>MidSum)
{
Complete();
}
else
{
Mutiple();
}
}
printf(
"%d %d\n",Sum-dp[MidSum],dp[MidSum]);
}
return 0;
}
转载请注明原文地址: https://ju.6miu.com/read-1299666.html