讨论 / 为什么就是80分,那20呢?
xttts 2008-09-10 00:17:00
点我顶贴 收藏 删除
program xttts;

type tt=array [1..6] of boolean;

var

p:array [1..6] of real;

i:longint;a:tt;j,u,d:byte;

function try(const n:byte;const m:byte):real;

var

i,j:byte; h:byte; t:byte;

ans,out:real;

rat:real;

min:real;

begin

if m=1 then begin try:=0; exit; end;

t:=0;ans:=0;rat:=1;

for i:=n to n+u-1 do begin

h:=(i-1) mod u+1;

if not a[h] then continue;

t:=t+1;min:=1E+30;

for j:=1 to u do if a[j] and (j<>i) then begin

a[j]:=false;

out:=ans+rat*p[h]*(t+try(h+1,m-1));

a[j]:=true;

if out<min then min:=out;

end;

ans:=min; rat:=rat*(1-p[h]);

end;

try:=(ans+rat*m)/(1-rat);

end;

begin

readln(u);for i:=1 to u do read(p[i]);

for i:=1 to u do p[i]:=p[i]/100;

fillchar(a,sizeof(a),true);

writeln(try(1,u):3:3);

end.

我后面可能来不了了.

谁能改出来不妨自己提交.

#1 xttts@2008-09-10 00:17:00
回复 删除
知道了,j<>h 不是j<>i
#2 drcool@2013-12-31 04:23:16
回复 删除
try:=(ans+rat*m)/(1-rat); 这句话是什么意思?
#3 drcool@2013-12-31 04:33:23
回复 删除
明白了,应该是极限思想
查看更多回复
提交回复