1. 程式人生 > >洛谷——P2737 [USACO4.1]麥香牛塊Beef McNuggets

洛谷——P2737 [USACO4.1]麥香牛塊Beef McNuggets

-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);
12
13 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