讨论 / 赛题疑惑Lv2
dislike 2009-07-13 05:13:00
点我顶贴 收藏 删除
var

a:array[1..10] of boolean;

b:array[0..10,0..30] of longint;

p:array[1..10] of longint;

n,m,t,i,j,k,l,ans:longint;

function check:boolean;

var

i,j:longint;

c:array[1..30] of boolean;

begin

fillchar(c,sizeof(c),false);

for i:=1 to b[0,0] do c[b[0,i]]:=true;

for i:=1 to t do

if a[i] then

for j:=1 to b[i,0] do

c[b[i,j]]:=true;

for i:=1 to n do

if not c[i] then exit(false);

exit(true);

end;

function sum:longint;

var

i:longint;

begin

sum:=0;

for i:=1 to t do

if a[i] then sum:=sum+p[i];

end;

procedure sub(s:longint);

var

i,j:longint;

begin

if s>t then begin

if check then ans:=sum;

exit;

end;

a[s]:=true;

sub(s+1);

a[s]:=false;

sub(s+1);

end;

begin

readln(n,b[0,0],t);

for i:=1 to b[0,0] do

read(b[0,i]);

readln;

for i:=1 to t do

begin

read(p[i],b[i,0]);

for j:=1 to b[i,0] do

read(b[i,j]);

readln;

end;

fillchar(a,sizeof(a),false);

ans:=maxlongint;

sub(1);

writeln(ans);

end.

#1 Mato完整版@2009-07-06 06:32:00
回复 删除
DFS
#2 hws_sheng@2009-07-13 05:13:00
回复 删除
比较简单的dfs
查看更多回复
提交回复