1688: [Usaco2005 Open]Disease Manangement 疾病管理

1688: [Usaco2005 Open]Disease Manangement 疾病管理

Time Limit: 5 Sec  Memory Limit: 64 MB
Submit: 413  Solved: 275
[Submit][Status][Discuss]

Description

Alas! A set of D (1 <= D <= 15) diseases (numbered 1..D) is running through the farm. Farmer John would like to milk as many of his N (1 <= N <= 1,000) cows as possible. If the milked cows carry more than K (1 <= K <= D) different diseases among them, then the milk will be too contaminated and will have to be discarded in its entirety. Please help determine the largest number of cows FJ can milk without having to discard the milk.

Input

* Line 1: Three space-separated integers: N, D, and K * Lines 2..N+1: Line i+1 describes the diseases of cow i with a list of 1 or more space-separated integers. The first integer, d_i, is the count of cow i‘s diseases; the next d_i integers enumerate the actual diseases. Of course, the list is empty if d_i is 0. 有N头牛,它们可能患有D种病,现在从这些牛中选出若干头来,但选出来的牛患病的集合中不过超过K种病.

Output

* Line 1: M, the maximum number of cows which can be milked.

Sample Input

6 3 2
0---------第一头牛患0种病
1 1------第二头牛患一种病,为第一种病.
1 2
1 3
2 2 1
2 2 1

Sample Output

5

OUTPUT DETAILS:

If FJ milks cows 1, 2, 3, 5, and 6, then the milk will have only two
diseases (#1 and #2), which is no greater than K (2).

HINT

Source

Silver

题解:其实一开始想的很复杂,连树状数组都想过用上,但是后来发现貌似也就15种病,这样子就容易了——直接进行01状态压缩,然后枚举各种状态(HansBug:实际上,对于疾病的状态只需要保留刚刚好K种病即可,就算是更少的病种也可以剪掉,想想为什么^_^),然后就是各种位运算,然后A掉么么哒

 1 /**************************************************************
 2     Problem: 1688
 3     User: HansBug
 4     Language: Pascal
 5     Result: Accepted
 6     Time:80 ms
 7     Memory:4132 kb
 8 ****************************************************************/
 9
10 var
11    i,j,k,l,m,n,x,ans:longint;
12    a:array[0..1000000] of longint;
13 function min(x,y:longint):longint;
14          begin
15               if x<y then min:=x else min:=y;
16          end;
17 function max(x,y:longint):longint;
18          begin
19               if x>y then max:=x else max:=y;
20          end;
21 begin
22      readln(n,m,l);l:=min(l,m);ans:=0;
23      for i:=1 to n do
24          begin
25               a[i]:=0;
26               read(k);
27               for j:=1 to k do
28                   begin
29                        read(x);
30                        a[i]:=a[i] or (1 shl (x-1));
31                   end;
32               readln;
33          end;
34      for i:=0 to trunc(exp(ln(2)*m)-1) do
35          begin
36               j:=i;k:=0;
37               while j>0 do
38                     begin
39                          inc(k,j mod 2);
40                          j:=j div 2;
41                     end;
42               if k<>l then continue;k:=0;
43               for j:=1 to n do if (i or a[j])=i then inc(k);
44               ans:=max(ans,k);
45          end;
46      writeln(ans);
47 end.
时间: 2024-10-12 20:00:50

1688: [Usaco2005 Open]Disease Manangement 疾病管理的相关文章

BZOJ 1688: [Usaco2005 Open]Disease Manangement 疾病管理

题目 1688: [Usaco2005 Open]Disease Manangement 疾病管理 Time Limit: 5 Sec  Memory Limit: 64 MB Description Alas! A set of D (1 <= D <= 15) diseases (numbered 1..D) is running through the farm. Farmer John would like to milk as many of his N (1 <= N <

bzoj1688: [Usaco2005 Open]Disease Manangement 疾病管理

思路:状压dp,枚举疾病的集合,然后判断一下可行性即可. #include<bits/stdc++.h> using namespace std; #define maxs 400000 #define maxn 1900 int n,d,k; int a[maxn],f[maxs],num[maxs]; int main(){ scanf("%d%d%d",&n,&d,&k); for (int i=1;i<(1<<d);i++)

【状压dp】【bitset】bzoj1688 [Usaco2005 Open]Disease Manangement 疾病管理

vs(i)表示患i这种疾病的牛的集合. f(S)表示S集合的病被多少头牛患了. 枚举不在S中的疾病i,把除了i和S之外的所有病的牛集合记作St. f(S|i)=max{f(S)+((St|vs(i))^St)中牛的数量} #include<cstdio> #include<bitset> #include<algorithm> using namespace std; bitset<1000>vs[15],t,t2; int n,m,K,ans,f[1<

慢阻肺疾病管理app——需求设计心得

需求确定已经两个星期过去了,现在回过头来写需求设计心得,能够总结出很多问题 过程: 拿到老师给的需求文档,对老师的需求进行提炼,选择自己将要实现的功能 对选择的需求进行了细分,完成需求原型.在此过程中,我们对需求的内容进行了讨论,对我们要实现的app进行了一个大致的想象,勾勒出每一个需求的呈现形式以及每一个功能的实现方式:当需求确定完,开始制作需求原型的时候,又发现了很多可以修改的地方,并且因为技术的原因,制作出来的需求原型似乎并没有完美的展现我们所期待的哪些功能,不过原型制作完需求也差不多确定

团队项目需求心得——慢阻肺疾病管理APP

一.项目介绍: 先上图: 这是我们小组开发项目的系统构成图. 本项目研发面向家庭/社区,对稳定期中慢阻肺患者病情和环境全方位监测.简单病情趋势分析和患者行为干预,并且提供患者与家庭医生和专家沟通渠道的慢阻肺患者康复综合护理系统. 二.过程心得:   这是我第一次执行这样的任务,当然,一个项目开始之前,最重要的就是确定需求,细化需求,其实也就相当于完成了项目的一半. 1. 个人的分析: 团队共同确定一个需求,首先要每一个人都好好对大体的需求有自己的理解,在脑海中有细节的分化,甚至可以编写成一个文档

慢阻肺疾病管理APP——第一次迭代心得

时光匆匆,不知不觉就到了第十二周.--第一次迭代都完成了,最终迭代还会远吗? 一.第一次迭代的过程: 对于安卓,我一无所知.但是从无到有,虽然过程是让人崩溃的,但是当看到结果,心里还是很欣慰的,我想这就是一个程序员能从早到晚面对代码毫不懈怠的原因--因为有所期待,所以才会坚持. 另外,当初我们设想自己能完成巨多的任务,实际上上手操作,和想象中还是有差距的,这也许就是现实和梦想的距离.前期期望过高,就会造成过程中的尴尬,还好这些问题也被我们的机智给化解了. 自律和自学的能力在这个过程中显得无比重要

9月刷题总结

全是usaco水题.... 贪心(这个要放在首位,思想太重要): [BZOJ]1650: [Usaco2006 Dec]River Hopscotch 跳石子(二分+贪心) [BZOJ]1691: [Usaco2007 Dec]挑剔的美食家(multiset+贪心) [BZOJ]1692 & 1640: [Usaco2007 Dec]队列变换(后缀数组+贪心) [BZOJ]1620: [Usaco2008 Nov]Time Management 时间管理(贪心) [BZOJ]1634: [Usa

计数类问题专题

主要是前两天被uoj的毛爷爷的题虐的不轻,心里很不爽啊,必须努力了,, 计数类问题分为:1.组合数学及数论计数 2.dp:状态压缩dp,插头轮廓线dp,树形dp,数位dp,普通dp 3.容斥原理 4.polya原理 5.图论计数 6.生成函数 7.其它(生成树计数等等) 本文主要研究前3个内容 考虑基本计数原理:加法原理,减法原理,乘法原理,除法原理 计数的基本原则:结果不重不漏 加法原理比较自然,中间过程有时减法原理 考虑到无向,有向图的各种量值(生成树之类)计数,状态压缩dp解决 论文:ht

大神刷题表

9月27日 后缀数组:[wikioi3160]最长公共子串 dp:NOIP2001统计单词个数 后缀自动机:[spoj1812]Longest Common Substring II [wikioi3160]最长公共子串 [spoj7258]Lexicographical Substring Search 扫描线+set:[poj2932]Coneology 扫描线+set+树上删边游戏:[FJOI2013]圆形游戏 结论:[bzoj3706][FJ2014集训]反色刷 最小环:[poj1734