hdu 1085 Holding Bin-Laden Captive!(母函数)
#include <stdio.h>
#include <string.h>
#include <stdlib.h>
#define MAXN 8001
const int coinKinds[3] = { 1, 2, 5 };
int num[3], y1[MAXN], y2[MAXN];
void calc(const int n)
{
int i, j, k;
memset(y1, 0, sizeof(y1));
memset(y2, 0, sizeof(y2));
for(i = 0; i <= num[0]; i++) y1[i] = 1;
for(i = 1; i <= 2; i++)
{
for(j = 0; j <= n; j++)
{
for(k = 0; k + j <= n && k <= num[i] * coinKinds[i]; k += coinKinds[i])
{
y2[j + k] += y1[j];
}
}
for(j = 0; j <= n; j++)
{
y1[j] = y2[j];
y2[j] = 0;
}
}
}
int main()
{
#ifndef ONLINE_JUDGE
freopen("indata.txt", "r", stdin);
#endif
int i,n;
while(scanf("%d %d %d", &num[0], &num[1], &num[2]), num[0] + num[1] + num[2])
{
n = num[0] + 2 * num[1] + 5 * num[2];
calc(n);
// for(i = 1; i <= n; i++) printf("%d ", y1[i]); printf("\n");
for(i = 1; i <= n; i++)
{
if(!y1[i])
{
printf("%d\n", i);
break;
}
}
if(i == n + 1) printf("%d\n", i);
}
return 0;
}
浙公网安备 33010602011771号