状压DP复习
深感自己姿势水平之蒻……一直都不是很会状压DP,NOIP又特别喜欢考,就来复习一发……
题目来源 Orz sqzmz
T1 【BZOJ4197】【NOI2015】寿司晚宴
(做过)质因数分解最大的质因子独自处理,$\sqrt{500}$以内的质数只有八个,因此可以用$2^{16}$的状态来表示一种方案;
然后有同样因子的两个数不能同时出现,排序然后随便搞搞就行了……
#include<algorithm>
#include<iostream>
#include<cstring>
#include<cstdio>
#include<cmath>
using namespace std;
typedef long long ll;
const int p[]={,,,,,,,};
struct num{
int n,bigp;
}a[];
bool cmp(num a,num b){
return a.bigp<b.bigp;
}
int n,r=;
ll mod,ans,f[][],g[][][];
int main(){
scanf("%d%lld",&n,&mod);
for(int i=;i<=n;i++){
int tmp=i;
for(int j=;j<;j++){
if(!(tmp%p[j])){
a[i].n|=(<<j);
while(!(tmp%p[j]))tmp/=p[j];
}
}
a[i].bigp=tmp;
}
sort(a+,a+n+,cmp);
f[][]=;
for(int i=;i<=n;i++){
if(i==||a[i].bigp!=a[i-].bigp||a[i].bigp==){
memcpy(g[],f,sizeof(g[]));
memcpy(g[],f,sizeof(g[]));
}
for(int j=r-;~j;j--){
for(int k=r-;~k;k--){
if((j&k)>)continue;
if(!(a[i].n&k))g[][a[i].n|j][k]=(g[][a[i].n|j][k]+g[][j][k])%mod;
if(!(a[i].n&j))g[][j][a[i].n|k]=(g[][j][a[i].n|k]+g[][j][k])%mod;
}
}
if(i==n||a[i].bigp!=a[i+].bigp||a[i].bigp==){
for(int j=r-;~j;j--){
for(int k=r-;~k;k--){
if((j&k)>)continue;
f[j][k]=g[][j][k]+g[][j][k]-f[j][k];
}
}
}
}
for(int j=r-;~j;j--){
for(int k=r-;~k;k--){
if((j&k)>)continue;
ans=(ans+f[j][k])%mod;
}
}
ans=(ans+mod)%mod;
printf("%lld",ans);
return ;
}
T2 【BZOJ1879】【SDOI2009】Bill的挑战
设$f[i][s]$表示到第$i$位,匹配状态为$s$的方案数(S为十五位二进制数),预处理转移状态DP即可。
#include<algorithm>
#include<iostream>
#include<cstring>
#include<cstdio>
#include<cmath>
#include<queue>
#define inf 2147483647
#define eps 1e-9
#define mod 1000003
using namespace std;
typedef long long ll;
int t,n,k,len,ans,bt[],p[][],f[][];
char s[][];
int main(){
for(int i=;i<;i++)bt[i]=bt[i>>]+(i&);
scanf("%d",&t);
while(t--){
memset(f,,sizeof(f));
memset(p,,sizeof(p));
ans=;
scanf("%d%d",&n,&k);
for(int i=;i<n;i++){
scanf("%s",s[i]);
}
len=strlen(s[]);
for(int i=;i<n;i++){
for(int j=;j<len;j++){
if(s[i][j]=='?'){
for(int c=;c<;c++)p[j][c]|=(<<i);
}else p[j][s[i][j]-'a']|=(<<i);
}
}
f[][(<<n)-]=;
for(int i=;i<len;i++){
for(int j=;j<(<<n);j++){
if(f[i][j]){
for(int c=;c<;c++){
f[i+][j&p[i][c]]=(f[i+][j&p[i][c]]+f[i][j])%mod;
}
}
}
}
for(int i=;i<(<<n);i++){
if(bt[i]==k)ans=(ans+f[len][i])%mod;
}
printf("%d\n",ans);
}
return ;
}
状压DP复习的更多相关文章
- 状压DP复习笔记
前言 复习笔记第4篇.CSP RP++. 引用部分为总结性内容. 0--P1433 吃奶酪 题目链接 luogu 题意 房间里放着 \(n\) 块奶酪,要把它们都吃掉,问至少要跑多少距离?一开始在 \ ...
- 状压dp专题复习
状压dp专题复习 (有些题过于水,我直接跳了) 技巧总结 : 1.矩阵状压上一行的选择情况 \(n * 2^n\) D [BZOJ2734][HNOI2012]集合选数 蒻得不行的我觉得这是一道比较难 ...
- 算法复习——状压dp
状压dp的核心在于,当我们不能通过表现单一的对象的状态来达到dp的最优子结构和无后效性原则时,我们可能保存多个元素的有关信息··这时候利用2进制的01来表示每个元素相关状态并将其压缩成2进制数就可以达 ...
- P1879 [USACO06NOV]玉米田Corn Fields 状压dp/插头dp
正解:状压dp/插头dp 解题报告: 链接! ……我真的太菜了……我以为一个小时前要搞完的题目调错误调了一个小时……90分到100我差不多搞了一个小时…… 然后这题还是做过的……就很气,觉得确实是要搞 ...
- ZOJ 3777 - Problem Arrangement - [状压DP][第11届浙江省赛B题]
题目链接:http://acm.zju.edu.cn/onlinejudge/showProblem.do?problemCode=3777 Time Limit: 2 Seconds Me ...
- 【题解】洛谷P1896 [SCOI2005] 互不侵犯(状压DP)
洛谷P1896:https://www.luogu.org/problemnew/show/P1896 前言 这是一道状压DP的经典题 原来已经做过了 但是快要NOIP 复习一波 关于一些位运算的知识 ...
- poj2411 Mondriaan's Dream[简单状压dp]
$11*11$格子板上铺$1*2$地砖方案.以前做过?权当复习算了,毕竟以前学都是浅尝辄止的..常规题,注意两个条件:上一行铺竖着的则这一行同一位一定要铺上竖的,这一行单独铺横的要求枚举集合中出现连续 ...
- 【模拟8.11】星空(差分转化,状压DP,最短路)
一道很好的题,综合很多知识点. 首先复习差分: 将原来的每个点a[i]转化为b[i]=a[i]^a[i+1],(如果是求和形式就是b[i]=a[i+1]-a[i]) 我们发现这样的方便在于我 ...
- BZOJ 1087: [SCOI2005]互不侵犯King [状压DP]
1087: [SCOI2005]互不侵犯King Time Limit: 10 Sec Memory Limit: 162 MBSubmit: 3336 Solved: 1936[Submit][ ...
随机推荐
- C#数组大小分析(附测试过程中想起的debug和release区别)
C#数组的理论最大长度到底是多少呢?曾经一度问过度娘,谷歌,貌似都没有得出一个比较准确的答案,无外乎是什么Int32的最大值啊什么的,今天终于决定写个软件来自己测试一下,在几台不同的电脑里面实际测试看 ...
- ZBrush中设置背面遮罩的两种方法
背面遮罩是ZBrush软件实时遮罩的一种,它的出现能够解决我们在模型雕刻时的一些问题.我们在 ZBrush®中雕刻一个比较薄的物体时,经常会不经意的雕刻到背面的物体.那么遇到此类状况该如何设置ZBru ...
- hibernate---crateria
Leslie 趁还没忘掉,赶快记录下来 Hibernate中Criteria的完整用法 转自:http://www.360doc.com/content/090313/10/26262_2794855 ...
- Java以流的方式将指定文件夹里的.txt文件全部复制到另一文件夹,并删除原文件夹中所有.txt文件
import java.io.BufferedReader; import java.io.BufferedWriter; import java.io.File; import java.io.Fi ...
- UVA1583-Digit Generator(紫书例题3.5)
For a positive integer N , the digit-sum of N is defined as the sum of N itself and its digits. When ...
- Consider defining a bean of type 'XX.XX.XX.XX.mapper.XXMapper' in your configuration.
今天构建一个springboot 项目,采用mybatis+mysql 然后就出现了这种错误....浪费我半天时间 Description: Field loginLogMapper in com.g ...
- 转载:CentOS查看本机公网IP命令
icanhazip.com 使你在任何地方知道你的公网IP地址 icanhazip.com是一个网址,你在浏览器中输入这个网址,你就能得到你的公网IP地址了. 我在Linux下一般使用curl ica ...
- vue项目中,如何对static文件夹下的静态文件添加时间戳,以达到清除缓存
例如config.js文件是存放在static文件夹下,里面存放的是websocket信息,需要经常改动.改动了以后由于缓存信息,使其不生效,因此需要对引入的文件添加时间戳. 最新方法: 注意转义符的 ...
- Numpy的使用规则
之前安装的python版本是3.7 各种库都是自己一个一个下载安装的 很操心 各种缺功能 后来发现了anaconda 啊 真是一个好东西 简单来说 它就是一个涵盖大部分常用库的python包 一次安装 ...
- python_形参、实参
#参数:形参.实参'''def display_message(title): print("My favourite book is %s" %title) #return 0 ...