题目大意:
给n个数,判断一个最大的数不能被这n个数组合。组合的时候可以选无数个。
样例输入:
3
3 6 10
样例输出:
17
解释:
1,2,4,5,7,8,11,14,17——都不能,其中17最大。
这道题目主要是如何判断当前这个数是最大,不用循环下去,以后的都可以被组合到了,这就需要判断如果当前连续可以组合的已经等于min{a[i]}了——例如就可以break了,因为这样子就可以永远的组合下去了。
还有就是有一个特殊数据,特殊判断一下,如果循环次数大于1000000的话直接输出0
var
flag:boolean;
n,i,min,ans,t,max:longint;
a:array[1..10] of longint;
f:array[0..1000000] of boolean;
begin
readln(n);
min:=maxlongint;
for i:=1 to n do
begin
read(a[i]);
f[a[i]]:=true;
if a[i]<min then min:=a[i];
end;
t:=1;
f[0]:=true;
while true do
begin
flag:=false;
for i:=1 to n do
if (t>=a[i]) and f[t-a[i]] then
begin
flag:=true;
break;
end;
if flag then
begin
f[t]:=true;
inc(ans);
if ans=min then break;
end
else
begin
ans:=0;
if t>max then max:=t;
end;
inc(t);
if t>1000000 then
begin
writeln(0);
halt;
end;
end;
writeln(max);
end.