题目链接

今天拿这道题目学习了一下状压dp

状压dp就是说把每个分状态用二进制来记录

比如这个题,我们先用map统计最多会有几种花

    int n;cin>>n;for(int i=1;i<=n;i++){int xx;cin>>xx;while(xx--){string x;cin>>x;if(!ma[x])ma[x]=++cnt;v[i]|=1<<(ma[x]-1);}}

然后用i来表示所有的状态,对于每一个i,用i&v[j]进行比较,如果为0就说明这种情况有拿不到花的妹妹,不符合,需要break,然后用min更新答案即可;

 for(int i=1;i<(1<<cnt);i++){int res=__builtin_popcount(i);if(res>cnt)continue;int sum=0;for(int j=1;j<=n;j++){if(v[j]&i)sum++;else break;}if(sum==n)ans=min(ans,res);      } 

完整代码

#include <bits/stdc++.h>
typedef long long ll;
using namespace std;map <string,ll> ma;
ll cnt;
ll v[22];void solve(){ma.clear();cnt=0;memset(v,0,sizeof(v));ll n;cin>>n;for(ll i=1;i<=n;i++){ll xx;cin>>xx;while(xx--){string x;cin>>x;if(!ma[x])ma[x]=++cnt;v[i]|=1<<(ma[x]-1);//?}}ll ans=cnt;for(ll i=1;i<(1<<cnt);i++){ll res=__builtin_popcount(i);if(res>cnt)continue;ll sum=0;for(ll j=1;j<=n;j++){if(v[j]&i)sum++;else break;}if(sum==n)ans=min(ans,res);    } cout<<ans<<endl;
}int main(){std::ios::sync_with_stdio(false);cin.tie(0);cout.tie(0);
//  freopen("sbcf.out","w",stdout);ll T;cin>>T;while(T--){solve();}return 0;
}

【题解】zjnu2709 善良的dp欧尼酱相关推荐

  1. 欧尼酱讲JVM(01)——整体概览(导航)

    从业这么久了,输入了很多东西,趁我还算不老,趁我还有精力,我觉得把我的知识和经验整理一番,输出出来. 那么首先就从JVM开始吧.我将从以下几个方面讲解JVM: 欧尼酱讲JVM(02)--类的加载过程 ...

  2. 欧尼酱讲JVM(22)——分代收集算法

    目录 分代收集算法 HotSpot中的分代收集 年轻代 老年代 没有一种最好的算法吗?没有,没有最好只有最适合.具体问题具体分析! 上一篇文章<欧尼酱讲JVM(21)--垃圾回收相关算法> ...

  3. UMR与欧尼酱 区间相加问题

    UMR与欧尼酱 Time Limit: 1000MS Memory Limit: 65536KB Submit Statistic Problem Description Umaru 今天看到新发售的 ...

  4. java的标量和聚合量_欧尼酱讲JVM(16)——如何基于逃逸分析进行代码优化

    代码优化是一个涉及面很广的"工程",但是今天呢,本姑娘主要给大家分享基于逃逸分析,如何给代码做优化.那么逃逸分析是什么呢?我前面的文章也仔细的讲解过了,这里就不过多的赘述了.有不明 ...

  5. 欧尼酱讲JVM(17)——方法区详解有图有真相

    目录 位置图解 方法区的理解 方法区在哪里 方法区的基本理解 HotSpot中方法区的理解(演进过程) 方法区的内部结构 图解方法区内部结构 运行时常量池 class文件中常量池的理解 为什么需要常量 ...

  6. [NOIP模拟测试9]题(Problem) 题解 (组合数全家桶+dp)

    达哥送分给我我都不要,感觉自己挺牛批. $type=0:$ 跟visit那题类似,枚举横向移动的步数直接推公式: $ans=\sum C_n^i \times C_i^{\frac{i}{2}} \t ...

  7. 【NOI2015】BZOJ4199品酒大会题解(SAM+树形DP)

    题目:BZOJ4199. 题目大意:给定一个字符串SSS,并给出一个长度为∣S∣|S|∣S∣的序列aia_iai​.现在设SiS_iSi​表示SSS以第iii个字符开始的后缀,对于每个0≤r<∣ ...

  8. CSUST 2007 我爱吃烧烤 题解(状压dp)

    题目链接 题目大意 总共 n 家烧烤店,有 m 家特殊烧烤店,从 i 到 j 号烧烤点有 mp [ i ] [ j ] 种方案,消耗一点体力值,问消耗 q 点体力值且至少经过 k 家特殊烧烤店的方案数 ...

  9. 7_6_Q题 Brackets 题解[POJ2955](区间DP)

    题目链接 简单题意 给出一些()和[]组成的序列,要求求出其中最长的合法的子序列长度是多少. 思路 一开始想的是把他转化成最长上升子序列来做,但是方括号和圆括号的交叉不好处理,所有转向用区间DP来做 ...

最新文章

  1. 重读The C programming Lanuage 笔记三:简单计算器程序
  2. 【Android 异步操作】AsyncTask 异步任务 ( AsyncTask 异步任务执行方法 execute 方法相关源码解析 )
  3. 【Python学习教程】推导式与生成器
  4. oracle数据库月份日期固定,oracle 日期函数介绍-数据库专栏,ORACLE
  5. C# List的克隆
  6. 网易2017春招笔试真题编程题集合
  7. 6.Swoole WebSocket
  8. IDEA切换使用的语言
  9. 手机屏幕分辨率真的是越高越清晰吗?
  10. excel如何输入身份证号码
  11. 使用linaro工具链编译ARM64架构内核
  12. stupid代码提交到github
  13. 靠着这份“葵花宝典”,让我收到了6个大厂的offer(华为+字节+腾讯+京东+网易+滴滴)
  14. 使用gca警告: Calling gca() with keyword arguments was deprecated in Matplotlib 3.4.
  15. js:使用nodejs为页面传递mysql中的数据
  16. [JLOI2008]将军
  17. 计算机知识及保密培训目的,二勘院举办保密知识和计算机网络安全专题培训会...
  18. 矢量、栅格、瓦片地图傻傻分不清
  19. 市面上常见模拟器比对
  20. 三分钟认知Softmax和Sigmoid的详细区别

热门文章

  1. 数位DP———POJ 3208 启示录
  2. zuul设置熔断、断路器
  3. 《网络编程》关于 UNIX网络编程 卷1 的 unp.h 和源码编译问题
  4. 首届全球 Pulsar Hackathon 2021 结果宣布,全球 Top5 团队出炉!
  5. OpenCV for Python之改变图片颜色
  6. -kdb debugging with verdi
  7. xp系统关闭文件和打印共享服务器,XP打印共享四大问题及解决方法
  8. H5 + WebGL 展示的3D无人机
  9. lattice 的Synplify pro综合工具,以及RTL寄存器查看
  10. 2021 OpenCV人工智能竞赛优秀项目团队介绍集锦(一)