讨论 / 有规律吗?
181818181818 2008-10-19 03:15:00
点我顶贴 收藏 删除
????
#1 332404521@2008-06-04 06:50:00
回复 删除
简单的DP :-)

你要交表也可以

#2 lizhixin@2008-10-19 02:50:00
回复 删除
LS给人家点提示嘛

program n116;

var ans:array[0..10000]of longint;

nzz:array[0..30000]of boolean;

f,g,from,orz:array[0..30000]of longint;

n,i,m,j,my:longint;

begin

readln(n);

m:=0;

for i:=1 to n do

begin

readln(ans[i]);

if ans[i]>m then m:=ans[i];

end;

nzz[1]:=true;

for i:=2 to trunc(sqrt(m)) do

for j:=2 to m div i do nzz[i*j]:=true;

j:=0;

for i:=2 to m do

begin

if not nzz[i] then

begin

inc(j);

orz[j]:=i;

from[i]:=j;

end

else

from[i]:=j;

end;

f[1]:=-1;g[1]:=0;

for i:=2 to m do

begin

if (not nzz[i]) or (not nzz[i-1]) then

begin

f[i]:=1;

continue;

end;

my:=123456789;

for j:=1 to from[i] do if (f[i-orz[j]]=-1) and (my>g[i-orz[j]]) then my:=g[i-orz[j]];

if my<>123456789 then f[i]:=my+1

else

begin

f[i]:=-1;

my:=-2;

for j:=1 to from[i] do

if (f[i-orz[j]]<>-1) and (my<f[i-orz[j]]) then my:=f[i-orz[j]];

g[i]:=my+1;

end;

end;

for i:=1 to n do writeln(f[ans[i]]);

end.

#3 xiaokeke@2008-10-19 03:15:00
回复 删除
这个dp很简单么?

=_=bbb

查看更多回复
提交回复