標題:包子湊數ios
小明幾乎天天早晨都會在一家包子鋪吃早餐。他發現這家包子鋪有N種蒸籠,其中第i種蒸籠剛好能放Ai個包子。每種蒸籠都有很是多籠,能夠認爲是無限籠。函數
每當有顧客想買X個包子,賣包子的大叔就會迅速選出若干籠包子來,使得這若干籠中剛好一共有X個包子。好比一共有3種蒸籠,分別能放三、4和5個包子。當顧客想買11個包子時,大叔就會選2籠3個的再加1籠5個的(也可能選出1籠3個的再加2籠4個的)。spa
固然有時包子大叔不管如何也湊不出顧客想買的數量。好比一共有3種蒸籠,分別能放四、5和6個包子。而顧客想買7個包子時,大叔就湊不出來了。操作系統
小明想知道一共有多少種數目是包子大叔湊不出來的。code
輸入
----
第一行包含一個整數N。(1 <= N <= 100)
如下N行每行包含一個整數Ai。(1 <= Ai <= 100) blog
輸出
----
一個整數表明答案。若是湊不出的數目有無限多個,輸出INF。內存
例如,
輸入:
2
4
5 ci
程序應該輸出:
6 資源
再例如,
輸入:
2
4
6 編譯器
程序應該輸出:
INF
樣例解釋:
對於樣例1,湊不出的數目包括:1, 2, 3, 6, 7, 11。
對於樣例2,全部奇數都湊不出來,因此有無限多個。
資源約定:
峯值內存消耗(含虛擬機) < 256M
CPU消耗 < 1000ms
請嚴格按要求輸出,不要多此一舉地打印相似:「請您輸入...」 的多餘內容。
注意:
main函數須要返回0;
只使用ANSI C/ANSI C++ 標準;
不要調用依賴於編譯環境或操做系統的特殊函數。
全部依賴的函數必須明確地在源文件中 #include <xxx>
不能經過工程設置而省略經常使用頭文件。
提交程序時,注意選擇所指望的語言類型和編譯器類型。
#include <iostream> #define MAXN 10010 //最多湊出的包子個數爲100*100 using namespace std; int gcd(int x,int y){ int temp; while(y!=0){ temp=x%y; x=y; y=temp; } return x; } int main(){ int n; int a[100]; bool dp[MAXN]; int count=0; cin>>n; for(int i=0;i<n;i++){ cin>>a[i]; } int g=a[0]; for(int i=1;i<n;i++){ g=gcd(g,a[i]); } if(g!=1){ cout<<"INF"<<endl; } else{ dp[0]=true; for(int i=0;i<n;i++){ for(int j=0;j<MAXN;j++){ if(dp[j]){ dp[j+a[i]]=true; } } } for(int i=0;i<MAXN;i++){ if(!dp[i]){ count++; } } cout<<count<<endl; } }