
状态压缩
Lifel
dcoi 蒟蒻一枚 欢迎交流~~~qq:1627767186
展开
-
bzoj1725: [Usaco2006 Nov]Corn Fields牧场的安排 状压dp
题目大意:没有放置限制和左上,右上,左下,右下限制的bzoj1087 [SCOI2005]互不侵犯King 做法同, 先预处理合法的状态,然后转移 PS:枚举当前这一层和上一层状态的顺序是不重要的(即j,kj,k),因为无论什么顺序,上一层的答案都全部被处理出来了#include<iostream>#include<cstdio>#include<cmath>#include<cstri原创 2017-09-13 09:31:07 · 454 阅读 · 0 评论 -
bzoj1231[Usaco2008 Nov]mixup2 混乱的奶牛 状压dp
题目大意:给定一个长度为n的序列,询问任意相差都大于给定k的排列的数量一开始做的时候看错题了,以为只要任意有一个就要计算方案数,设计了一个状态 fi,j,k,lf_{i,j,k,l} i表示当前算了i个,j表示当前压缩的状态,k表示当前结尾,l表示此时为混乱或混乱Orz 正确的只有fi,jf_{i,j}i表示结尾,j表示状态,不需要第几个的原因是枚举的状态是递增的,求计算当前状态是基于已经计算好原创 2017-09-13 10:50:34 · 428 阅读 · 0 评论 -
bzoj2046分裂
只可会意,不能言传的一道题 注意:枚举状态从1开始而不是0,因为sum0=0sum_{0}=0会影响答案#include<iostream>#include<cstdio>#include<cmath>#include<cstring>#include<algorithm>#define fo(i,a,b) for(int i=a;i<=b;i++)#define fod(i,a,b)原创 2017-09-13 14:40:50 · 450 阅读 · 0 评论 -
bzoj2073: [POI2004]PRZ 状压dp
想一下最优子结构,要解决一个集合,那么它的真子集一定是最优的,所以枚举子集,由子集转移过来3163^{16}.预处理,每个子集的时间和重量. PS:本来维护集合想用类似树状数组的方法 ,但时间不具有区间可加性#include<iostream>#include<cstdio>#include<cmath>#include<cstring>#include<algorithm>#defin原创 2017-09-13 16:01:18 · 462 阅读 · 0 评论 -
bzoj1688: [Usaco2005 Open]Disease Manangement 疾病管理 状压dp
题意:给定n个集合,询问能够组成一种特定集合所能选的最大个数 很水的题,注意循环顺序(我一开始写反了)#include<iostream>#include<cstdio>#include<cmath>#include<cstring>#include<algorithm>#define fo(i,a,b) for(int i=a;i<=b;i++)#define fod(i,a,b)原创 2017-09-13 16:52:55 · 451 阅读 · 0 评论 -
bzoj4145 [AMPPZ2014]The Prices 状压dp
题目大意:你要购买m种物品各一件,一共有n家商店,你到第i家商店的路费为d[i],在第i家商店购买第j种物品的费用为c[i][j],求最小总费用。 1<=n<=100,1<=m<=16,1<=d,c<=1e61 <= n <= 100, 1 <= m <= 16, 1 <= d, c <= 1e6 思路:f[i][j]为到i处现在购买的状态.很容易想到的一种是枚举上一个状态和现在的状态,然后转移原创 2017-08-24 10:48:33 · 385 阅读 · 0 评论 -
bzoj1072[SCOI2007]排列perm
题目大意: 给定n个数字,求这些数字组成的不重复的全排列中有多少整除d 暴力:用next_permutation+set判重暴力判断(据说是可以过的)大常数选手又T掉了#include<iostream>#include<cstdio>#include<cmath>#include<cstring>#include<algorithm>#include<set>#define fo(原创 2017-09-12 20:53:26 · 331 阅读 · 0 评论 -
bzoj1087 [SCOI2005]互不侵犯King
#include<iostream>#include<cstdio>#include<cmath>#include<cstring>#include<algorithm>#define fo(i,a,b) for(int i=a;i<=b;i++)#define fod(i,a,b) for(int i=a;i>=b;i--)using namespace std;const int原创 2017-09-12 22:32:37 · 439 阅读 · 1 评论