分析:母函数(详细见找单词)
代码:
#include<cstdio>
#include<cstring>
const int maxn = 100;
int c1[maxn*maxn + 10], c2[maxn*maxn + 10], a[maxn*maxn], b[maxn*maxn];
int main(){
int n, x, y, sum;
while(scanf("%d", &n), n){
sum = 0;
for(int i = 1; i <= n; i++){
scanf("%d%d", &x, &y);
a[i] = x;
b[i] = y;
sum += y*x;
}
if(sum%3){
printf("sorry\n");
continue;
}
memset(c1, 0, sizeof(c1));
c1[0] = 1;
memset(c2, 0, sizeof(c2));
for(int i = 1; i <= n; i++){
for(int j = 0; j <= b[i]; j++)
for(int k = 0; k + a[i]*j <= sum; k++)
c2[k + a[i]*j] = (c2[k + a[i]*j] + c1[k])%10000;
memcpy(c1, c2, sizeof(c2));
memset(c2, 0, sizeof(c2));
}
if(c1[sum/3])
printf("%d\n", c1[sum/3]);
else
printf("sorry\n");
}
return 0;
}