[BZOJ1076] [SCOI2008]奖励关

来源:互联网 发布:cocos2d js 编辑:程序博客网 时间:2024/04/28 15:22

传送门

http://www.lydsy.com/JudgeOnline/problem.php?id=1076

题目大意

每个物品会等概率出现,且数量无限多
当前出现的物品不被选择那么之后就不会出现
每次该选择物品的条件为已选取了条件中的物品每种至少一个
若选取方案最优,询问期望得分是多少

题解

=+m
dp[i,j]:ij
ij
jk
那么dp[i,j]+=max{dp[i+1,j],dp[i+1,j  or  1<<(k1)]+x[k]}
否则dp[i,j]+=dp[i+1,j]

uses math;var    f:array[0..200,0..70000]of real;    x,y:array[0..20]of longint;    i,j,k:longint;    n,m,a,b:longint;begin    readln(n,m);    fillchar(y,sizeof(y),0);    for i:=1 to m do        begin            read(x[i],a);            while a<>0 do                begin                    inc(y[i],1<<(a-1));                    read(a);                end;        end;    for i:=n downto 1 do        for j:=0 to (1<<m)-1 do            begin                for k:=1 to m do                    if (j and y[k])=y[k]                    then f[i,j]:=f[i,j]+max(f[i+1,j],f[i+1,j or (1<<(k-1))]+x[k])                    else f[i,j]:=f[i,j]+f[i+1,j];                               f[i,j]:=f[i,j]/m;            end;    writeln(f[1,0]:0:6);end.
0 0
原创粉丝点击