#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(母函数--找零钱)
最新推荐文章于 2022-11-01 21:46:39 发布
本文介绍了一种算法,用于处理特定数值序列,并通过内存管理和迭代操作来优化计算效率。详细步骤包括初始化序列标记、读取输入序列、计算序列元素的累积值,并通过复制和迭代更新序列状态来扩展序列范围。

1967

被折叠的 条评论
为什么被折叠?



