题目大意是给出面值分别为1 2 5的硬币的数量,求用这些硬币不能搭配出来的总面值的方法数。
母函数模板请看我的另一篇文章http://blog.csdn.net/rcy_zhu/article/details/75041050
#include<iostream>
#include<cstdio>
#include<cstring>
#include<algorithm>
#include<string>
using namespace std;
#define ll long long
#define inf 0xfffffff
#define N 9002
int a[N],b[N];
int v[4]= {0,1,2,5};
int n2[5];
int main()
{
while(cin>>n2[1]>>n2[2]>>n2[3],n2[1],n2[2],n2[3])
{
memset(a,0,sizeof(a));
a[0]=1;
int n=0;
for(int i=1; i<=3; i++)
{
n+=v[i]*n2[i];
memset(b,0,sizeof(b));
for(int j=0; j<=n2[i]&&j*v[i]<=n; j++)
{
for(int k=0; k+j*v[i]<=n; k++)
b[k+j*v[i]]+=a[k];
}
memcpy(a,b,sizeof(b));
}
int ans=0;
for(ans=0; ans<=n; ans++)
if(a[ans]==0)
break;
printf("%d\n",ans);
memset(n2,0,sizeof(n2));
}
}