洛谷——P2737 [USACO4.1]麥香牛塊Beef McNuggets
阿新 • • 發佈:2017-11-26
-m gist sample copy 布朗 ets spa 一次 ++
https://www.luogu.org/problemnew/show/P2737
題目描述
農夫布朗的奶牛們正在進行鬥爭,因為它們聽說麥當勞正在考慮引進一種新產品:麥香牛塊。奶牛們正在想盡一切辦法讓這種可怕的設想泡湯。奶牛們進行鬥爭的策略之一是“劣質的包裝”。“看,”奶牛們說,“如果你只用一次能裝3塊、6塊或者10塊的三種包裝盒包裝麥香牛塊,你就不可能滿足一次只想買1、2、4、5、7、8、11、14或者17塊麥香牛塊的顧客了。劣質的包裝意味著劣質的產品。”
你的任務是幫助這些奶牛。給出包裝盒的種類數N(1<=N<=10)和N個代表不同種類包裝盒容納麥香牛塊個數的正整數(1<=i<=256),輸出顧客不能用上述包裝盒(每種盒子數量無限)買到麥香牛塊的最大塊數。如果所有購買方案都能得到滿足或者不存在不能買到塊數的上限,則輸出0。 不能買到的最大塊數(倘它存在)不超過2,000,000,000。
輸入輸出格式
輸入格式:
第1行: 包裝盒的種類數N
第2行到N+1行: 每個種類包裝盒容納麥香牛塊的個數
輸出格式:
輸出文件只有一行數字:顧客不能用包裝盒買到麥香牛塊的最大塊數或0(如果所有購買方案都能得到滿足或者顧客不能買到的塊數沒有上限)。
輸入輸出樣例
輸入樣例#1: 復制3 3 6 10輸出樣例#1: 復制
17
說明
題目翻譯來自NOCOW。
USACO Training Section 4.1
最大上限可以確定為 256*255-255-256(noip2017 Day1 T1)然後,枚舉判斷就可以了
1 #include <cstdio> 2 3 inline void read(int &x) 4 { 5 x=0; register char ch=getchar(); 6 for(; ch>‘9‘||ch<‘0‘; ) ch=getchar(); 7 for(; ch>=‘0‘&&ch<=‘9‘; ch=getchar()) x=x*10+ch-‘0‘; 8 } 9 10 const int M(256*254+5); 11 const int N(260); 1213 int a[N],ans; 14 bool get[M*100]; 15 16 int Presist() 17 { 18 int n; read(n); 19 for(int i=1; i<=n; ++i) read(a[i]); 20 get[0]=1; 21 for(int i=0; i<M; ++i) 22 if(get[i]) 23 for(int j=1; j<=n; ++j) 24 get[i+a[j]]=1; 25 else ans=i; 26 if(ans>=M-5) puts("0"); 27 else printf("%d\n",ans); 28 return 0; 29 } 30 31 int Aptal=Presist(); 32 int main(int argc,char**argv){;}
洛谷——P2737 [USACO4.1]麥香牛塊Beef McNuggets