UVA 11825 状态压缩DP+子集思想
2015-06-01 11:56
281 查看
很明显的状态压缩思想了。把全集分组,枚举每个集合的子集,看一个子集是否能覆盖所有的点,若能,则f[s]=max(f[s],f[s^s0]+1)。即与差集+1比较。
这种枚举集合的思想还是第一次遇到,果然太弱了。。。。~~~~
其中枚举集合
for(s0=s;s0;s0=(s0-1)&s)
这种枚举集合的思想还是第一次遇到,果然太弱了。。。。~~~~
其中枚举集合
for(s0=s;s0;s0=(s0-1)&s)
#include <iostream> #include <cstdio> #include <cstring> #include <algorithm> using namespace std; const int N=16; int pt[1<<N]; int cover[1<<N]; int f[1<<N]; int main(){ int n,x,icase=0; while(scanf("%d",&n),n){ int c,s; for(int i=0;i<n;i++){ scanf("%d",&c); s=(1<<i); for(int k=0;k<c;k++){ scanf("%d",&x); s|=(1<<x); } pt[i]=s; } memset(cover,0,sizeof(cover)); for(int i=0;i<(1<<n);i++){ for(int j=0;j<n;j++){ if((1<<j)&i){ cover[i]|=pt[j]; } } } memset(f,0,sizeof(f)); for(int s=0;s<(1<<n);s++){ f[s]=0; for(int s0=s;s0;s0=(s0-1)&s){ if(cover[s0]==(1<<n)-1) f[s]=max(f[s],f[s0^s]+1); } } printf("Case %d: %d\n",++icase,f[(1<<n)-1]); } return 0; }
相关文章推荐
- WPF开发时光之痕日记本——终于完工了。。晒晒截图(三)(已上传安装包)
- shrio 权限管理filterChainDefinitions过滤器配置
- js事件监听器用法实例详解
- xml编码格式在tomcat下运行出错,eclipse里面直接运行没有问题
- swift 点击cell没反应,点击后应该跳到指定页面
- 几个常用的异步框架和网络访问框架区分对比
- 【swift】15-0601 枚举类型
- 如何学习
- 如何设置sap生产订单自动关闭
- Oracle学习(8):处理数据
- linux学习笔记—历史命令
- layout_marginRight 的用法
- 基于第三方微信授权登录的iOS代码分析
- 表单
- failed: unacceptable content-type: text/html
- MQTT协议之websocket方式发布接收消息
- ApachePhpMysql64位环境搭建
- haproxy安装部署
- Yii2 自定义class、全局函数
- 在线预览PDF格式的需求