状压动规
文章平均质量分 54
WerKeyTom_FTD
我是一只来自中山纪念中学高三的oier,请多多指教
展开
-
[GDKOI2016]染色大战
题目大意一个矩形,每个格点初始时是黑或白。 两方轮流操作,每次将一个白格点染黑,如果因为这次操作每将一个1*1正方形的四个格点都变黑可以获得该正方形的权值,一次操作使得获得权值不为0那么可以继续操作。 求两者采用最优策略下先手得到的分数与后手得到的分数的差。模拟列个状压DP然后就是模拟题意,注意使用位运算优化常数。#include<cstdio>#include<algorithm>#inc原创 2016-03-01 22:03:03 · 717 阅读 · 0 评论 -
[arc078f]Mole and Abandoned Mine
题目大意一张无向带权连通图,删去边权和尽量小的边使得1->n路径唯一。DP设f[s,i]表示1->i,目前和1联通的集合是s,1->i不存在两条路,能保留的最大边权和。 转移分两种,一种是加一条桥,一种是给i挂一个集合。 即f[s,i]+dis[i,j]−>f[s,j]f[s,i]+dis[i,j]->f[s,j] 还有f[s,i]+p[y]−>f[s|y,i]f[s,i]+p[y]->f[s原创 2017-11-03 16:09:10 · 912 阅读 · 0 评论 -
[agc005d]~K Perm Counting
前言简单的容斥DP题。题目大意有多少排列对于每个位置i都满足|ai−i|!=k|a_i-i|!=k容斥当然是经典容斥问题了。 假如钦定某些位置不满足条件,其可以往前或后连。 发现只有模k相同的互相有影响。 不妨先做一个状压dp,f[i,j,s]表示有i个点,有j个点有出度(也就是j个不满足条件),其中i有没有入度,i+1有没有入度。 转移简单。 初始状态是f[1],注意第1个不能往前连。原创 2017-10-31 10:38:28 · 1163 阅读 · 1 评论 -
[agc017f]Zigzag
前言DP题,我当然不会啦。题目大意请你找到m个n位二进制数,对于相邻两个,i+1的前j位的和不小于i的前j位的和。 此外还有对于某个二进制数某位必须是几的若干个限制。DP很容易想到设dp[i,s]表示做到第i个二进制数第i个是s,每次枚举前一个,复杂度很大。 转移复杂度太大了,我们来尝试优化。 如果可以不用枚举前一个就好了。 那么不如让前一个对着当前的改变吧! 设dp[i,j,s]表示做到原创 2017-10-06 16:42:10 · 587 阅读 · 0 评论 -
[agc016f]Games on DAG
前言感觉是简单DP。 肯定是状压。 然后你只需要想到按照mex划分即可。题意一个有向无环图,求有多少边集的子集组成的图,使得sg1 xor sg2>0sg_1\ xor\ sg_2>0DP正难则反,考虑使1和2sg值相等。 设dpsdp_s表示只考虑s这个点集的答案(可以不包含1和2)。 我们把s划分为A和B,其中B是mex最小的点集,那么A中每个点至少要连向B一条边,B中点可以随意连向A,原创 2017-10-05 21:50:15 · 899 阅读 · 0 评论 -
[agc012e]Camel and Oases
前言很容易的就发现了只有log次跳跃。 然后状压DP。 似乎就是个简单题吧(怎么比12c还简单)题意一排点,两点间有距离。 初始你有一个行走值v,如果相邻两点距离不超过v你可以自由在这两点行走。 当v大于0时,你可以选择某一时刻突然飞到任意点,这样做后v会减半(下取整)。 问从每个位置初始出发能否到达所有位置。DP预处理left[i,j]表示在i行走值已经减半j次能往左走到哪,同理有rig原创 2017-09-23 11:19:45 · 680 阅读 · 0 评论 -
[JZOJ5041]游戏
题目描述有一天小A和小B在一棵有N个节点的树上玩游戏,初始时1号节点上有一枚硬币。游戏以如下方式进行: ●每一轮,小A选取一个节点,并在该节点上画一个叉 ●紧接着,小B将硬币移动到一个相邻的、没有被画叉的节点 ●小B在硬币原来所在的节点上画一个叉 以上三步不停重复,直到小B无法再移动硬币。而在游戏过程中,小A全程被戴上眼罩,因此小A无法准确地知道每一个时刻硬币在哪一个节点上。他只知道树的形态原创 2017-04-06 09:43:41 · 513 阅读 · 0 评论 -
小H的卡片
题目描述状压dp显然我们只要能选出一些数,使它们能够组合成1即合法。 根据裴蜀定理,显然是最大公约数为1时合法。 容易想到状态压缩dp保存每个质因数是否出现,但质因数太多了,怎么办? 可以枚举一张卡片必须被我们选,那么就只剩下最多9个质因数了。 于是做n次状压dp即可。#include<cstdio>#include<algorithm>#include<cmath>#define f原创 2016-06-30 16:14:56 · 527 阅读 · 0 评论 -
魔方阵
题目大意太麻烦了……打表做法请先阅读OJ上本题的题解。 我们发现只需要维护可扩展源三角形,然后用最小表示法只有10种状态! 然后打表,flag[i,j]表示状态i变成状态j的方案数,dt1[i]和dt2[i]分别表示状态i下可选取的一级三角形和二级三角形个数,然后DP显然。#include<cstdio>#include<algorithm>#define fo(i,a,b) for(i=a原创 2016-03-09 19:00:36 · 612 阅读 · 0 评论 -
[UOJ#214]合唱队形
题目大意有n个人每个人有一个字符集初始为空。 有tot个事件,每个事件形如在第ai个人的字符集里放了bi这个小写字母。 每个时刻等概率发生一个事件。 有一个长度为m的字符串s。某个时刻如果存在编号连续的m个人,按从小到大的顺序发现对于第i个人字符集里都有si,那么则胜利。 问胜利的期望时间,要求判断无解,答案在模意义下进行。容斥设f(i)f(i)表示时刻i还没有胜利的概率。原创 2017-11-24 12:11:59 · 1023 阅读 · 0 评论