包子湊數(shù)
小明幾乎每天早晨都會(huì)在一家包子鋪吃早餐。
他發(fā)現(xiàn)這家包子鋪有N種蒸籠,其中第i種蒸籠恰好能放Ai個(gè)包子猖辫。每種蒸籠都有非常多籠,可以認(rèn)為是無(wú)限籠砚殿。
每當(dāng)有顧客想買(mǎi)X個(gè)包子啃憎,賣(mài)包子的大叔就會(huì)迅速選出若干籠包子來(lái),使得這若干籠中恰好一共有X個(gè)包子似炎。比如一共有3種蒸籠辛萍,分別能放3、4和5個(gè)包子羡藐。當(dāng)顧客想買(mǎi)11個(gè)包子時(shí)贩毕,大叔就會(huì)選2籠3個(gè)的再加1籠5個(gè)的(也可能選出1籠3個(gè)的再加2籠4個(gè)的)。
當(dāng)然有時(shí)包子大叔無(wú)論如何也湊不出顧客想買(mǎi)的數(shù)量仆嗦。
比如一共有3種蒸籠辉阶,分別能放4、5和6個(gè)包子。而顧客想買(mǎi)7個(gè)包子時(shí)谆甜,大叔就湊不出來(lái)了垃僚。
小明想知道一共有多少種數(shù)目是包子大叔湊不出來(lái)的。
輸入
第一行包含一個(gè)整數(shù)N规辱。(1 <= N <= 100)
以下N行每行包含一個(gè)整數(shù)Ai谆棺。(1 <= Ai <= 100)
輸出
一個(gè)整數(shù)代表答案。如果湊不出的數(shù)目有無(wú)限多個(gè)按摘,輸出INF包券。
例如:
輸入:
2
4
5
程序應(yīng)該輸出:
6
再例如,
輸入:
2
4
6
程序應(yīng)該輸出:
INF
樣例解釋?zhuān)?br>
對(duì)于樣例1炫贤,湊不出的數(shù)目包括:1, 2, 3, 6, 7, 11溅固。
對(duì)于樣例2,所有奇數(shù)都湊不出來(lái)兰珍,所以有無(wú)限多個(gè)侍郭。
資源約定:
峰值內(nèi)存消耗(含虛擬機(jī)) < 256M
CPU消耗 < 1000ms
#include<bits/stdc++.h>
using namespace std;
int gcd(int a,int b)
{
if(b==0) return a;
return gcd(b,a%b);
}
int f[10000];
int main()
{
int n;
scanf("%d",&n);
int a[n];
int g;
f[0]=1;
for(int i=1; i<=n; i++)
{
scanf("%d",&a[i]);
if(i==1)
g=a[i];
else
g=gcd(a[i],g);
for(int j=0; j<10000; j++)
{
if(f[j])
f[j+a[i]]=1;
}
}
int ans=0;
if(g!=1)
cout<<"INF"<<endl;
else
{
for(int i=0; i<10000; i++)
{
if(!f[i])
ans++;
}
cout<<ans<<endl;
}
}