[TYVJ]P4869 罪犯分组 状态压缩DP
来源:互联网 发布:qq三国70js橙鬼 编辑:程序博客网 时间:2024/06/06 16:58
题解:
新技能:
子集枚举。显然可以枚举所有小于等于该状态的数,但还有更快的方法:比如枚举状态x的所有子集,可以这样写:for(int i=x;i;i=(i-1)&x)。i就为x的所有子集。感性的理解:x中某位为1,子集中该位为0或1;x中某位为0,子集中该位只能是0。&x就保证了第二点。
代码:
#include<cstdio>#include<cstring>#include<iostream>#include<algorithm>using namespace std;const int maxn=(1<<17);int n,m,k,f[maxn];bool map[18][18];int main(){ scanf("%d%d%d",&n,&m,&k); for(int i=1;i<=m;i++) { int x,y; scanf("%d%d",&x,&y);x--;y--; map[x][y]=map[y][x]=true; } memset(f,63,sizeof(f)); for(int i=0;i<(1<<n);i++) { int sum=0; for(int j=0;j<n;j++) for(int k=0;k<n;k++) if(map[j][k]&&(1<<j)&i&&(1<<k)&i)sum++; if(sum/2<=k)f[i]=1; for(int j=i;j;j=(j-1)&i)f[i]=min(f[i],f[j]+f[i^j]); } printf("%d",f[(1<<n)-1]);}
阅读全文
3 1
- [TYVJ]P4869 罪犯分组 状态压缩DP
- Tyvj P4869 罪犯分组
- tyvj 4869 罪犯分组 状压DP
- tyvj 1684(状态压缩dp)
- Tyvj P1059 过河问题 - DP&状态压缩
- TYVJ 4869 罪犯分组 || 清北学堂金秋杯大奖赛
- TYVJ4869 罪犯分组 状压DP枚举子集
- 罪犯分组
- Tyvj 1403 关押罪犯
- 状态压缩dp
- pku1038状态压缩dp
- 状态压缩DP 入门
- HDU1074 状态压缩DP
- Poj3254 状态压缩DP
- 状态压缩DP入门
- 【状态压缩DP】互不侵犯
- 【状态压缩DP】电子竞技
- HDU1074 状态压缩DP
- 【分治递归法】顺序表应用7:最大子段和之分治递归法
- set-matrix-zeroes
- Codeforces 859D Third Month Insanity 概率DP
- 晓说2017-定期持续更新
- APUE 第3-5章
- [TYVJ]P4869 罪犯分组 状态压缩DP
- PAT-0-1003-我要通过!(20)
- hibernate unknow entity
- Java中的六种数据存储
- 跳台阶
- vue代码在浏览器上整段失踪
- LeetCode-66-Plus One 水题
- 机器人项目部分数据本地化——工厂模式+策略模式实现
- 欢迎使用CSDN-markdown编辑器