bzoj1688[Usaco2005 Open]Disease Manangement 疾病管理

题意:

n头牛,d种疾病,每头牛都患一些疾病,现在要求选出最多的牛,使这些牛患病的种类数不超过k。n≤1000,d≤15

题解:

状压dp。f[i][S]表示当前考虑i头牛,患病集合为S,

则f[i][S]=max(f[i+1][S|si]+1,f[i+1][S]),S|si为1的位不超过k且S为1的位不超过k

=f[i+1][S],S|si为1的位超过k且S为1的位不超过k

可以先对每个状态预处理以下判断它为1的位数是否超过了k。

代码:

 1 #include <cstdio>
 2 #include <cstring>
 3 #include <algorithm>
 4 #define inc(i,j,k) for(int i=j;i<=k;i++)
 5 #define maxn 40000
 6 using namespace std;
 7
 8 inline int read(){
 9     char ch=getchar(); int f=1,x=0;
10     while(ch<'0'||ch>'9'){if(ch=='-')f=-1; ch=getchar();}
11     while(ch>='0'&&ch<='9')x=x*10+ch-'0',ch=getchar();
12     return f*x;
13 }
14 int f[2][maxn],n,d,k,a[maxn/20],x,y; bool no[maxn];
15 void init(){
16     inc(i,0,(1<<d)-1){
17         no[i]=0; int tot=0;
18         for(int j=0;(1<<j)<=i;j++)if(i&(1<<j)){
19             tot++; if(tot>k){no[i]=1; break;}
20         }
21     }
22 }
23 int main(){
24     n=read(); d=read(); k=read(); init();
25     inc(i,1,n){int x=read(); inc(j,1,x){int y=read(); a[i]|=(1<<(y-1));}}
26     x=0; y=1;
27     for(int i=n;i>=1;i--){
28         inc(j,0,(1<<d)-1)if(!no[j]){
29             int z=j|a[i]; if(no[z])f[y][j]=f[x][j];else f[y][j]=max(f[x][z]+1,f[x][j]);
30         }
31         swap(x,y);
32     }
33     printf("%d",f[x][0]); return 0;
34 }

20160816

转载于:https://www.cnblogs.com/YuanZiming/p/5774607.html

bzoj1688[Usaco2005 Open]Disease Manangement 疾病管理*相关推荐

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

    1688: [Usaco2005 Open]Disease Manangement 疾病管理 Time Limit: 5 Sec  Memory Limit: 64 MB Submit: 727  S ...

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

    题目 1688: [Usaco2005 Open]Disease Manangement 疾病管理 Time Limit: 5 Sec  Memory Limit: 64 MB Description ...

  3. bzoj 1688: [Usaco2005 Open]Disease Manangement 疾病管理(状压)

    1688: [Usaco2005 Open]Disease Manangement 疾病管理 Time Limit: 5 Sec  Memory Limit: 64 MB Submit: 706  S ...

  4. 1688: [Usaco2005 Open]Disease Manangement 疾病管理( 枚举 )

    我一开始写了个状压dp..然后没有滚动就MLE了... 其实这道题直接暴力就行了... 2^15枚举每个状态, 然后检查每头牛是否能被选中, 这样是O( 2^15*1000 ), 也是和dp一样的时间 ...

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

    分析: 这个题的状压DP还是比较裸的,考虑将疾病状压,得到DP方程:F[S]为疾病状态为S时的最多奶牛数量,F[S]=max{f[s]+1}; 记得预处理出每个状态下疾病数是多少... 附上代码: # ...

  6. BZOJ1688|二进制枚举子集| 状态压缩DP

    Disease Manangement 疾病管理 Description Alas! A set of D (1 <= D <= 15) diseases (numbered 1..D) ...

  7. [微信小程序毕业设计源码]基于小程序的健康管理(慢性疾病)系统

    目录 一.程序介绍: 三.文档目录: 四.运行截图: 五.数据库表: 六.代码展示: 七.更多学习目录: 八.互动留言 一.程序介绍: 文档:开发技术文档.参考LW.答辩PPT,部分项目另有其他文档 ...

  8. 【2018 Nature】Review Disease Primers - Epilepsy 【文献翻译】

    第一遍,使用的机翻-生物方面的内容因为不懂所以没有审核过,之后再优化 摘要 癫痫影响所有年龄组,是最常见和最致残的神经系统疾病之一.癫痫的准确诊断至关重要,因为一些患者会被误诊为癫痫,而另一些患者则会 ...

  9. 宁夏慢阻肺数字化管理中心与葛兰素史克启动战略合作

    3月31日,银川市卫生健康委员会与葛兰素史克(中国)投资有限公司(以下简称"GSK 中国")签署战略合作协议,开展银川市呼吸慢病管理建设(以下简称"项目").该 ...

最新文章

  1. oracle开发数据库试题,Oracle_开发数据库试题.doc
  2. 《系统集成项目管理工程师》必背100个知识点-44应急储备和管理储备
  3. ActionBarActionMode的理解,出现菜单栏
  4. nodejs+express整合kindEditor实现图片上传 - 木子丰咪咕晶 - 开源中国
  5. python处理带有‘\x‘的字符串,拆分,解码,重组
  6. Android Proguard Questions
  7. oracle存在于A不存在于B,Oracle试题
  8. appium+python自动化51-adb文件导入和导出(pull push)
  9. vs2003不能调试4/8
  10. WaterfallTree(瀑布树) 详细技术分析系列
  11. 实用机器人设计(二)-传感器
  12. 02.XMemcached的使用
  13. APUE---chap3文件I/O---3.11原子操作
  14. 电商平台日志分析系统(大数据) 上(不完整-版本不对应)
  15. Adobe无法安装错误代码127
  16. 如何查看自己电脑应该买什么样的内存条
  17. Linux--指令(六) cp
  18. 求字符串的全排列的递归实现(对字符串中有相同字符也适用)
  19. ubuntu中文输入法输入不了中文
  20. 日本雅虎乐天商城批量上传步骤

热门文章

  1. The HipHop Virtual Machine
  2. C语言实现的Web服务器
  3. PHP之源码目录结构
  4. Web 开发与设计之 Google 兵器谱
  5. linux环境insight安装与使用
  6. MXNet中依赖库介绍及简单使用
  7. 【驱动】GPIO 作为按键时的 设备树 配置
  8. linux 获取cpu id,linux获取cpu id和disk id
  9. matlab画复变函数,科学网—复数复变函数的Matlab计算与绘图 - 周铁戈的博文
  10. 施工管理在计算机上的应用论文,【计算机专业毕业论文】关于计算机应用技术在工程项目管理中的应用...