状态压缩DP入门
时间:2019-08-11
本文章向大家介绍状态压缩DP入门,主要包括状态压缩DP入门使用实例、应用技巧、基本知识点总结和需要注意事项,具有一定的参考价值,需要的朋友可以参考一下。
简介
状态压缩DP是将一连串状态压缩成为一个P进制(P通常为2)数,并由此达到压缩的目的
例题
P1879 [USACO06NOV]玉米田Corn Fields
因为只和之前的一行有关系,就可以通过状压先找出这一行中合法的状态,再和上一行的进行转移
Code
#include<bits/stdc++.h> using namespace std; const int mod=1e8; int n,m,f[20][5001]; struct state{int c[5005],num;}a[20]; void change(int k,int t){ for(int i=0;i<(1<<n);i++) if(!(i&(i<<1))&&!(i&(i>>1))&&!(i&t)) a[k].c[++a[k].num]=i; } int main(){ scanf("%d%d",&m,&n); for(int i=1;i<=m;i++){ int t=0; for(int j=1,x;j<=n;j++) scanf("%d",&x),t=(t<<1)+1-x; change(i,t); } for(int i=1;i<=a[1].num;i++)f[1][i]=1; for(int i=2;i<=m;i++) for(int j=1;j<=a[i].num;j++) for(int k=1;k<=a[i-1].num;k++) if(!(a[i].c[j]&a[i-1].c[k])) f[i][j]=(f[i-1][k]+f[i][j])%mod; int ans=0; for(int i=1;i<=a[m].num;i++) ans=(ans+f[m][i])%mod; printf("%d\n",ans); }
这题还要简单一些,不用考虑限制
#include<bits/stdc++.h> using namespace std; int n,k; long long f[15][155][155]; int num[155],s[155]; int main(){ scanf("%d%d",&n,&k); for(int i=0;i<(1<<n);i++){ if(i&(i<<1))continue; s[++s[0]]=i; for(int j=0;j<n;j++)if(i&(1<<j))++num[s[0]]; } f[0][1][0]=1; for(int i=1;i<=n;i++) for(int j=1;j<=s[0];j++) for(int kk=0;kk<=k;kk++) if(kk>=num[j]) for(int t=1;t<=s[0];t++) if(!(s[t]&s[j])&&!(s[t]&(s[j]>>1))&&!(s[t]&(s[j]<<1))) f[i][j][kk]+=f[i-1][t][kk-num[j]]; long long ans=0; for(int i=1;i<=s[0];i++)ans+=f[n][i][k]; printf("%lld\n",ans); }
原文地址:https://www.cnblogs.com/coder-cjh/p/11336451.html
- Android TabWidget底部显示
- 《Redis设计与实现》读书笔记(三十六) ——Redis 慢查询日志实现
- 概率学中的随机变量与分布
- 神马?SQL竟然可以解脑筋急转弯的题目?
- android中一些特殊字符(如:←↑→↓等箭头符号)的Unicode码值
- 基于SpringBoot的任务管理平台v1.0正式发布
- 大数据系统的Lambda架构
- AKKA中的事件流
- Java初涉感悟
- Android 6.0 Permission权限与安全机制
- SpringBoot工作机制
- Android权限管理PermissionsDispatcher2.3.2使用+原生6.0权限使用
- SpringBoot中的IoC
- Sonar安装配置
- JavaScript 教程
- JavaScript 编辑工具
- JavaScript 与HTML
- JavaScript 与Java
- JavaScript 数据结构
- JavaScript 基本数据类型
- JavaScript 特殊数据类型
- JavaScript 运算符
- JavaScript typeof 运算符
- JavaScript 表达式
- JavaScript 类型转换
- JavaScript 基本语法
- JavaScript 注释
- Javascript 基本处理流程
- Javascript 选择结构
- Javascript if 语句
- Javascript if 语句的嵌套
- Javascript switch 语句
- Javascript 循环结构
- Javascript 循环结构实例
- Javascript 跳转语句
- Javascript 控制语句总结
- Javascript 函数介绍
- Javascript 函数的定义
- Javascript 函数调用
- Javascript 几种特殊的函数
- JavaScript 内置函数简介
- Javascript eval() 函数
- Javascript isFinite() 函数
- Javascript isNaN() 函数
- parseInt() 与 parseFloat()
- escape() 与 unescape()
- Javascript 字符串介绍
- Javascript length属性
- javascript 字符串函数
- Javascript 日期对象简介
- Javascript 日期对象用途
- Date 对象属性和方法
- Javascript 数组是什么
- Javascript 创建数组
- Javascript 数组赋值与取值
- Javascript 数组属性和方法
- 蓝桥杯 试题 基础练习 完美的代价(详细c++)
- 牛客小白月赛23 部分题解
- AtCoder Beginner Contest 159 A~~D
- 最大连续子序列和(最大子数组和)四种最详细的解法
- 玩转 Linux 环境下日期的语法
- dubbo学习之事件通知实践
- Panasonic Programming Contest 2020 A ~~C
- 采用递归生成排列
- UCF Local Programming Contest 2015 A~~H
- python之循环控制语句
- python之结合if条件判断和生成随机数的相关知识,完成石头剪刀布的游戏
- AtCoder Beginner Contest 172
- python的import与 from……import
- 题目 1159: [偶数求和]
- 回溯法求组合问题