完全背包。
对于(a_1x_1+a_2x_2+a_3x_3+cdots+a_nx_n=c)
- 如果(a_1,a_2,a_3,cdots,a_n)互质,(x_1,x_2,x_3,cdots,x_n)一定有解且有无穷多个。但此时导致方程无解的(c)的个数有限,也就是凑不出的包子数目有限。
- 如果(a_1,a_2,a_3,cdots,a_n)不互质,那么就有无穷多个(c)使得方程无解,也就是有无穷多个包子数目凑不出来,所以输出INF。
用(f[i]=1)表示第(i)个整数能够被计算出。
const int N=110,M=10010;
int a[N];
int f[M];
int n;
int gcd(int a,int b)
{
return b?gcd(b,a%b):a;
}
int main()
{
cin>>n;
int d=0;
for(int i=1;i<=n;i++)
{
cin>>a[i];
d=gcd(d,a[i]);
}
if(d > 1) puts("INF");
else
{
f[0]=1;
for(int i=1;i<=n;i++)
for(int j=a[i];j<M;j++)
f[j] |= f[j-a[i]];
int res=0;
for(int i=1;i<M;i++)
if(!f[i])
res++;
cout<<res<<endl;
}
//system("pause");
return 0;
}