bzoj1688[Usaco2005 Open]Disease Manangement 疾病管理*
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 疾病管理*相关推荐
- [BZOJ] 1688: [Usaco2005 Open]Disease Manangement 疾病管理
1688: [Usaco2005 Open]Disease Manangement 疾病管理 Time Limit: 5 Sec Memory Limit: 64 MB Submit: 727 S ...
- BZOJ 1688: [Usaco2005 Open]Disease Manangement 疾病管理
题目 1688: [Usaco2005 Open]Disease Manangement 疾病管理 Time Limit: 5 Sec Memory Limit: 64 MB Description ...
- bzoj 1688: [Usaco2005 Open]Disease Manangement 疾病管理(状压)
1688: [Usaco2005 Open]Disease Manangement 疾病管理 Time Limit: 5 Sec Memory Limit: 64 MB Submit: 706 S ...
- 1688: [Usaco2005 Open]Disease Manangement 疾病管理( 枚举 )
我一开始写了个状压dp..然后没有滚动就MLE了... 其实这道题直接暴力就行了... 2^15枚举每个状态, 然后检查每头牛是否能被选中, 这样是O( 2^15*1000 ), 也是和dp一样的时间 ...
- [Usaco2005 Open]Disease Manangement 疾病管理 BZOJ1688
分析: 这个题的状压DP还是比较裸的,考虑将疾病状压,得到DP方程:F[S]为疾病状态为S时的最多奶牛数量,F[S]=max{f[s]+1}; 记得预处理出每个状态下疾病数是多少... 附上代码: # ...
- BZOJ1688|二进制枚举子集| 状态压缩DP
Disease Manangement 疾病管理 Description Alas! A set of D (1 <= D <= 15) diseases (numbered 1..D) ...
- [微信小程序毕业设计源码]基于小程序的健康管理(慢性疾病)系统
目录 一.程序介绍: 三.文档目录: 四.运行截图: 五.数据库表: 六.代码展示: 七.更多学习目录: 八.互动留言 一.程序介绍: 文档:开发技术文档.参考LW.答辩PPT,部分项目另有其他文档 ...
- 【2018 Nature】Review Disease Primers - Epilepsy 【文献翻译】
第一遍,使用的机翻-生物方面的内容因为不懂所以没有审核过,之后再优化 摘要 癫痫影响所有年龄组,是最常见和最致残的神经系统疾病之一.癫痫的准确诊断至关重要,因为一些患者会被误诊为癫痫,而另一些患者则会 ...
- 宁夏慢阻肺数字化管理中心与葛兰素史克启动战略合作
3月31日,银川市卫生健康委员会与葛兰素史克(中国)投资有限公司(以下简称"GSK 中国")签署战略合作协议,开展银川市呼吸慢病管理建设(以下简称"项目").该 ...
最新文章
- oracle开发数据库试题,Oracle_开发数据库试题.doc
- 《系统集成项目管理工程师》必背100个知识点-44应急储备和管理储备
- ActionBarActionMode的理解,出现菜单栏
- nodejs+express整合kindEditor实现图片上传 - 木子丰咪咕晶 - 开源中国
- python处理带有‘\x‘的字符串,拆分,解码,重组
- Android Proguard Questions
- oracle存在于A不存在于B,Oracle试题
- appium+python自动化51-adb文件导入和导出(pull push)
- vs2003不能调试4/8
- WaterfallTree(瀑布树) 详细技术分析系列
- 实用机器人设计(二)-传感器
- 02.XMemcached的使用
- APUE---chap3文件I/O---3.11原子操作
- 电商平台日志分析系统(大数据) 上(不完整-版本不对应)
- Adobe无法安装错误代码127
- 如何查看自己电脑应该买什么样的内存条
- Linux--指令(六) cp
- 求字符串的全排列的递归实现(对字符串中有相同字符也适用)
- ubuntu中文输入法输入不了中文
- 日本雅虎乐天商城批量上传步骤
热门文章
- The HipHop Virtual Machine
- C语言实现的Web服务器
- PHP之源码目录结构
- Web 开发与设计之 Google 兵器谱
- linux环境insight安装与使用
- MXNet中依赖库介绍及简单使用
- 【驱动】GPIO 作为按键时的 设备树 配置
- linux 获取cpu id,linux获取cpu id和disk id
- matlab画复变函数,科学网—复数复变函数的Matlab计算与绘图 - 周铁戈的博文
- 施工管理在计算机上的应用论文,【计算机专业毕业论文】关于计算机应用技术在工程项目管理中的应用...