【noip模拟赛5】细菌
 

描述

近期,农场出现了D(1<=D<=15)种细菌。John要从他的 N(1<=N<=1,000)头奶牛中尽可能多地选些产奶。但是如果选中的奶牛携带了超过 K (1<=K<=D)种不同细菌,所生产的奶就不合格。请你帮助John 计算出最多可以选择多少头奶牛。

输入

第一行:三个整数N,D,K

下面N行:第i行表示一头牛所携带的细菌情况。第一个整数di表示这头牛所携带的细菌种类数,后面di个整数表示这些细菌的各自种类标号。

输出

只一个数 M,最大可选奶牛数。

输入样例 1

  1. 6 3 2 
  2. 0
  3. 1 1
  4. 1 2
  5. 1 3
  6. 2 2 1
  7. 2 2 1

输出样例 1

  1. 5

提示

背包(dp)类问题,需要枚举掉所有可能 再算哪个最多。
但涉及到一个问题,用数组记录的话,可能会爆空间!
 
存在哪几个病毒,在d最大只有15的情况下,我把用一个int 各位上的0,1 来表示就ok了,相比于用bool记录,还有利于计算。
所以开两个数组:
1 a[i]  记录第 i 个奶牛有哪几种病毒 ,比如第m种用 a[i]+=1<<(m-1)  来记录。
2 dp[i] 病毒情况为 i 时的最大奶牛数。更新n轮(n只奶牛分别枚举)。
 
  1. #include <iostream>
  2. #include <cstring>
  3. #include <cstdio>
  4. #include <cstring>
  5. #include <algorithm>
  6. #include <cmath>
  7. #include <time.h>
  8. #include <string>
  9. #include <map>
  10. #include <stack>
  11. #include <vector>
  12. #include <set>
  13. #include <queue>
  14. #define INF 0x3f3f3f3f
  15. using namespace std;
  16. const int N=;
  17. int n,k,d,m,t;
  18. int a[N],dp[N];
  19.  
  20. int fun(int x)
  21. {
  22. int c=;
  23. while(x)
  24. {
  25. if(x&)
  26. c++;
  27. x>>=;
  28. }
  29. return c;
  30. }
  31.  
  32. int main()
  33. {
  34. // freopen("input.txt","r",stdin);
  35. cin>>n>>d>>k;
  36. for(int i=; i<n; i++)
  37. {
  38. cin>>t;
  39. for(int j=; j<t; j++)
  40. {
  41. cin>>m;
  42. a[i]+=<<(m-); //状态压缩
  43. }
  44. }
  45. for(int i=;i<n;i++) // 从 0 到 n-1 枚举每只奶牛
  46. {
  47. for(int j=(<<d)-;j>;j--)
  48. {
  49. if(dp[j|a[i]]<dp[j]+) //取大
  50. dp[j|a[i]]=dp[j]+;
  51. }
  52. }
  53. int ans=;
  54. for(int i=;i<<<d;i++)
  55. {
  56. if(fun(i)<=k&&dp[i]>ans)
  57. ans=dp[i];
  58. }
  59. cout<<ans;
  60. return ;
  61. }

【noip模拟赛5】细菌 状压dp的更多相关文章

  1. BZOJ 3812 主旋律 (状压DP+容斥) + NOIP模拟赛 巨神兵(obelisk)(状压DP)

    这道题跟另一道题很像,先看看那道题吧 巨神兵(obelisk) 题面 欧贝利斯克的巨神兵很喜欢有向图,有一天他找到了一张nnn个点mmm条边的有向图.欧贝利斯克认为一个没有环的有向图是优美的,请问这张 ...

  2. 6.28 NOI模拟赛 好题 状压dp 随机化

    算是一道比较新颖的题目 尽管好像是两年前的省选模拟赛题目.. 对于20%的分数 可以进行爆搜,对于另外20%的数据 因为k很小所以考虑上状压dp. 观察最后答案是一个连通块 从而可以发现这个连通块必然 ...

  3. 2018.10.05 NOIP模拟 上升序列(状压dp)

    传送门 状压dp好题. 首先需要回忆O(nlogn)O(nlog n)O(nlogn)求lislislis的方法,我们会维护一个单调递增的ddd数组. 可以设计状态f(s1,s2)f(s1,s2)f( ...

  4. 2018.10.01 NOIP模拟 偷书(状压dp)

    传送门 状压dp经典题. 令f[i][j]f[i][j]f[i][j]表示到第i个,第i−k+1i-k+1i−k+1~iii个物品的状态是j时的最大总和. 然后简单维护一下转移就行了. 由于想皮一下果 ...

  5. 旅游(CSUST省赛选拔赛2+状压dp+最短路)

    题目链接:http://csustacm.com:4803/problem/1016 题目: 思路:状压dp+最短路,比赛的时候有想到状压dp,但是最短路部分写挫了,然后就卡死了,对不起出题人~dis ...

  6. [欢乐赛]班服 状压DP

    班服 (shirt.pas/.c/.cpp) 时间限制:1s:内存限制 128MB 题目描述: 要开运动会了,神犇学校的n个班级要选班服,班服共有100种样式,编号1~100.现在每个班都挑出了一些样 ...

  7. [CSP-S模拟测试]:装饰(状压DP)

    题目传送门(内部题114) 输入格式 第一行一个正整数$n$. 接下来一行$n-1$个正整数,第$i$个数为$f_{i+1}$. 接下来一行$n$个数,若第$i$个数为$0$则表示林先森希望$i$号点 ...

  8. [noip模拟]食物中毒<暴搜+状压优化>

    问题描述 Bqc经过一段时间的研究发现,要解这种毒需要一种特殊的药物.不幸的是,这种药物在 市面上不存在,没有办法Bqc只好亲自制得这种药物.它含有M种化学物质A1,A2,…,AM.现 在Bqc的手上 ...

  9. 【noip模拟赛7】上网 线性dp

    描述 假设有n个人要上网,却只有1台电脑可以上网.上网的时间是从1 szw 至 T szw ,szw是sxc,zsx,wl自创的时间单位,至于 szw怎么换算成s,min或h,没有人清楚.依次给出每个 ...

随机推荐

  1. 【原创】Linux系统不能上互联网情况下软件更新安装方法

    实际工作中,遇到了Linux 服务器在一台被隔离互联网的PC服务器上运行,使用Virtual Box,在解决此Linux更新的问题上,自己尝试了如下几种策略: 1.将DVD安装盘作为Linux更新源, ...

  2. photo型的object转byte[]

    IEnumerable en = (IEnumerable) myObject; byte[] myBytes = en.OfType<byte>().ToArray(); TypeCon ...

  3. java集合树状结构及源码

    java集合树状结构及源码 最近一直想看一下java集合的源码,毕竟平时用的比较多,但总是感觉是跟着习惯new出来一个对象,比如ArrayList,HashMap等等,所以就简单的看了一下,了解了一下 ...

  4. Configuring SSL for SAP Host Agent on UNIX

    https://help.sap.com/viewer/141cbf7f183242b0ad0964a5195b24e7/114/en-US/8d12f7b9244b44219bd14d619d3a2 ...

  5. ubuntu远程windows桌面

    最近把系统装成了ubuntu,需要远程windows  ,就用到了ubuntu的 rdesktop工具 1.先打开终端输入 rdesktop  看系统是否安装了  rdesktop  如果没有安装需要 ...

  6. leetcode每日刷题计划-简单篇day10

    跳题,不熟悉的留到周末再做. 保持冷静,不信画饼. num 100 相同的树 Same Tree 做法可能不是特别简洁,注意一下.最后判断完子树以后,要确定根的数值是一样的 然后在isleaf的判定先 ...

  7. 75.纯 CSS 创作一支摇曳着烛光的蜡烛

    原文地址:https://segmentfault.com/a/1190000015580809 学习后效果地址:https://scrimba.com/c/c8PQ3PTB 感想:CSS 真强大! ...

  8. 关于XML的小思考

    最近一段时间又接触了XML语言,现在看来它是一种可扩展标记语言,它的格式是标签语言,例如<>****<>此类,它在动态编译中有重要的作用,举个例子,一个班级里有37个人,到学期 ...

  9. Thinkphp5.0支付宝支付扩展库类库大全

    Thinkphp5.0支付宝支付扩展库类库大全,包括手机网站支付.电脑网站支付.支付查询.退款.退款查询.对账单等. Thinkphp5.0支付宝调用方法: 电脑网站支付 Pagepay.php 调用 ...

  10. Django上传文件和上传图片(不刷新页面)

    <!DOCTYPE html> <html lang="en"> <head> <meta charset="UTF-8&quo ...