[BZOJ1688] [Usaco2005 Open]Disease Manangement 疾病管理

来源:互联网 发布:照片转换卡通软件 编辑:程序博客网 时间:2024/06/04 18:52

传送门

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

题目大意

给定每种牛的病,询问牛的疾病总集合大小不超过k的最多头数

题解

状压
dp[j]=dp[j]+1  (j or x[i]=j)
被位运算和逻辑运算的优先级卡了!!!
i and 1<<(j-1)是先算i and 1再<<(j-1)的,,,
貌似逻辑运算优先级比位运算高

var dp:array[0..42768]of longint; x:array[0..2000]of longint; i,j,k:longint; n,m,t,ans,a:longint;function max(a,b:longint):longint;begin if a>b then exit(a) else exit(b);end;begin readln(n,m,t); for i:=1 to n do  begin   read(k); x[i]:=0;   for j:=1 to k do    begin read(a); inc(x[i],1<<(a-1)); end;  end; fillchar(dp,sizeof(dp),0); for i:=1 to n do  for j:=1<<m-1 downto 0 do   if j or x[i]=j then inc(dp[j]); ans:=0; for i:=0 to 1<<m-1 do  begin   k:=0;   for j:=1 to m do    if (i and (1<<(j-1)))<>0 then inc(k);   if k<=t then ans:=max(ans,dp[i]);  end; writeln(ans);end.
0 0
原创粉丝点击