sωēeτ¨fαrm
能量项链(NOIP2006)
deadrain 发表于 2007-08-16 23:44:45
状态转移方程为:f[i,j]:=max{ f[i,k]+f[k,j]+a[i]*a[k]*a[j]}
CODE:
-------------------------------------------
program p1312;
var
a:array[1..100] of longint;
f:array[0..100,0..100] of longint;
i,j,k,t,v,u,n,max:longint;
begin
readln(n);
for i:=0 to n-1 do
read(a[i]);
fillchar(f,sizeof(f),0);
for i:=2 to n do
begin
for j:=0 to n-1 do
begin
k:=(j+i) mod n;
max:=0;
for v:=j+1 to j+i-1 do
begin
u:=v mod n;
t:=a[j]*a[u]*a[k]+f[j,u]+f[u,k];
if t>max then max:=t;
end;
f[j,k]:=max;
end;
end;
max:=0;
for i:=0 to n-1 do
if f[i,i]>max then max:=f[i,i];
writeln(max);
end.
导弹拦截(NOIP1999)
deadrain 发表于 2007-08-16 23:19:02
CODE:
-------------------------------------
program p1303;
var
s:string;
c:char;
a:array[1..20] of integer;
f:array[1..20] of longint;
n,i,j,k:integer;
begin
n:=0;s:='';
while not eoln do
begin
read(c);
if c=',' then
begin
inc(n);
val(s,a[n],k);
s:='';
end
else s:=s+c;
end;
inc(n);
val(s,a[n],k);
fillchar(f,sizeof(f),0);
k:=1;f[n]:=1;
for i:=n-1 downto 1 do
begin
f[i]:=1;
for j:=i+1 to n do
if (a[i]>a[j]) and (f[i]<f[j]+1) then f[i]:=f[j]+1;
if f[i]>k then k:=f[i];
end;
write(k,',');
fillchar(f,sizeof(f),0);
k:=1;f[1]:=1;
for i:=2 to n do
begin
f[i]:=1;
for j:=i-1 downto 1 do
if (a[j]<a[i]) and (f[i]<f[j]+1) then f[i]:=f[j]+1;
if f[i]>k then k:=f[i];
end;
write(k-1);
end.
选数(NOIP2002)
deadrain 发表于 2007-08-15 21:56:13
CODE:
------------------------------------
program p1128;
var
n,k,i,s:integer;
a:array[1..20] of longint;
procedure judge(sum:longint);
var
i:longint;
begin
if sum<2 then exit;
if sum>2 then
for i:=2 to trunc(sqrt(sum)) do
if sum mod i=0 then exit;
inc(s);
end;
procedure search(st,k:integer;sum:longint);
var i:integer;
begin
if k=0 then begin judge(sum);exit;end;
for i:=st to n-k+1 do
search(i+1,k-1,sum+a[i]);
end;
begin
readln(n,k);
for i:=1 to n do
read(a[i]);
s:=0;
search(1,k,0);
writeln(s);
end.
FBI树(NOIP2004)
deadrain 发表于 2007-08-15 21:40:53
CODE:
---------------------------------------------
program p1114;
var
n:integer;
s:ansistring;
procedure search(s:ansistring);
var
l:integer;
n0,n1:boolean;
begin
l:=length(s);
if l>1 then
begin
search(copy(s,1,l div 2));
search(copy(s,l div 2+1,l div 2));
end;
if pos('0',s)<>0 then n0:=true else n0:=false;
if pos('1',s)<>0 then n1:=true else n1:=false;
if n0 and n1 then write('F')
else if n0 then write('B')
else write('I');
end;
begin
readln(n);
readln(s);
search(s);
end.
