#include <iostream>
#include <algorithm>
using namespace std;
#define MAX 300000
bool C1[MAX];
bool TempC1[MAX];
int endOfC1 = 0;
int main()
{
int n = 0;
while (cin >> n)
{
if (n < 0) break;
int countAll = 0;
endOfC1 = 0;
memset(C1, false, sizeof(C1));
C1[0] = true;
int curValue = 0;
int curNum = 0;
cin >> curValue >> curNum;
for (int i = 1; i <= curNum; ++i)
{
C1[i * curValue] = true;
}
endOfC1 = curNum * curValue;
countAll += endOfC1;
for (int i = 1; i < n; ++i)
{
memcpy(TempC1, C1, sizeof(TempC1));
int tempEnd = endOfC1;
cin >> curValue >> curNum;
countAll += curValue * curNum;
for (int j = 1; j <= curNum; ++j)
{
for (int k = 0; k <= tempEnd; ++k)
{
if (TempC1[k])
{
endOfC1 = k + j * curValue;
C1[endOfC1] = true;
}
}
}//end for j
}
int tmp = countAll / 2;
if (C1[tmp] && countAll % 2 == 0) cout << tmp << " " << tmp << endl;
else
{
for (int i = tmp + 1; i <= endOfC1; ++i)
if (C1[i]) { cout << i << " "; break;}
for (int i = tmp; i >= 0; --i)
if (C1[i]) { cout << i << "\n"; break;}
}
}
return 0;
}
HDU 1171(母函数--找零钱)
最新推荐文章于 2021-04-28 16:29:13 发布