输入包含多个测试用例。每个测试用例包含3个正整数num_1、num_2和num_5(0<=num_i<=1000)。一个包含0 0 0的测试用例表示输入结束,该测试用例不需要处理。
使用母函数求解:
#include
#include
#include
using namespace std;
#include
int a[10005], b[10005];
int num[4];
int main()
{
freopen("C:\\in.txt", "r", stdin);
while (scanf("%d %d %d", &num[1], &num[2], &num[3]) != EOF) {
int v[4] = {0, 1, 2, 5};
if (!num[1] && !num[2] && !num[3]) break;
int sum = 0;
for (int i = 1; i <= 3; i++)
sum += num[i] * v[i];
memset(a, 0, sizeof(a));
memset(b, 0, sizeof(b));
a[0] = 1;
for (int i = 1; i <= 3; i++) {
for (int j = 0; j <= sum; j++)
if (a[j])
for (int k = 0; k * v[i] + j <= sum && k <= num[i]; k++)
b[k * v[i] + j] += a[j];
for (int j = 0; j <= sum; j++) {
a[j] = b[j];
b[j] = 0;
}
}
int index = 0;
for (int i = 0; i <= 10000; i++) {
if (!a[i]) {
index = i;
break;
}
}
printf("%d\n", index);
}
return 0;
}