dp
文章平均质量分 61
heheda_is_an_OIer
这个作者很懒,什么都没留下…
展开
-
bzoj 3622 已经没有什么好害怕的了
我好害怕这种题 φ(≧ω≦*)?两个数组排序后,处理出next[i]表示满足tang[i]>yao[j]的最大的j。f[i][j]前i种糖果,有j个糖比药多,不考虑剩余情况的方案数//也就是剩余n-j个糖果的放法算一种,最后乘上阶乘。f[i][j]=f[i-1][j]+f[i-1][j-1]*max(next[i]-j+1,0) 开始忘记max了。因为f[i][j]不一定都是合法状态,所以要判一下原创 2015-11-16 10:39:01 · 458 阅读 · 0 评论 -
bzoj 2734 集合选数
构造矩阵1 3 9 27…2 6 18 54…4 12 36 108………每个数是上面的数乘2,左面的数乘3。这样进行状压dp就是相邻的格子不能选的方案数。如何判断一个二进制数没有两个连续的1? x&(x如果有的数没有出现过,就以它为左上角元素再构造一个矩阵。这是怎么想到的?!!#include#include#include#include#include#define ll long lo原创 2015-11-16 10:40:25 · 469 阅读 · 0 评论 -
bzoj 3594 方伯伯的玉米田
开始觉得自己好不容易想出一道题,后来发现自己是错的。用f[i][j]表示前i个玉米,发动j次技能最多能留下的玉米数。但是这个东西可以由j=1~i-1中任意一个数转移来,所以用树状数组优化dpf[i][j]=f[p][q]+1(p=p+q)#include#include#include#include#include#define ll long long#define inf 1e9#defin原创 2015-11-16 10:40:28 · 551 阅读 · 0 评论 -
bzoj 3029 守卫者的挑战
水题,唯一值得提的是我们不用维护背包剩余空间为O(K)的情况,只要维护最大到n的情况就行了。因为只要剩余空间到了n,无论如何也不会装满。#include#include#include#include#include#define md#define ll long long#define inf (int) 1e9#define eps 1e-8#define N 250using namesp原创 2015-11-16 10:38:03 · 699 阅读 · 0 评论 -
bzoj 2660 最多的方案 | dp
首先我们要把n分解为斐波拉契数的和,这里用贪心最大分解即可。保存的是斐波拉契数列的序列号。 比如9就分解为1,8序列号为1,5 然后我们注意到其实序列号n,n+1和n+2的分解是一样的,用二进制表示就是110和001是一样的。接着我们可以看到,比如1000000这里表示的是数字21贪心后用二进制表示的分解方案,那么他不同的分解方案就有 0110000 0101100 0101011 这里我们看到有原创 2015-11-16 10:39:37 · 394 阅读 · 0 评论 -
bzoj 2669 局部极小值
bzoj 2669 局部极小值有一个n行m列的整数矩阵,其中1到nm之间的每个整数恰好出现一次。如果一个格子比所有相邻格子(相邻是指有公共边或公共顶点)都小,我们说这个格子是局部极小值。给出所有局部极小值的位置,你的任务是判断有多少个可能的矩阵。有一个和dp求n的排列中有k个逆序对的方案数一样的转化从小到大放数,那么如果一个是局部极小值的格子没有被放数,那么周围都不能放数。由于最多有8个位置是局部原创 2015-11-16 10:40:14 · 894 阅读 · 0 评论 -
bzoj 3398 牡牛和牝牛
牝(pin 4声) 母的意思。牡(mu 3声) 公的意思。看到这些字我直接愣了,其实放在牝鸡司晨和牡蛎这两个词里我绝对能认出来。(是不是该去颓语文了?)这道题f[i]表示最后一个是公牛的方案数,=sigma(f[j])(j问题是hzwer用了奇怪的排列组合。这道题可以用隔板法,设abcd是放公牛的位置,那么a,b-k,c-2*k,d-3*k单调递增,可以用隔板法解决。再想一想那个可以重复位置放的隔原创 2015-11-16 10:39:26 · 2081 阅读 · 0 评论 -
poj 2411| 插头dp
经典题: 用1*2的木板铺满n*m的矩形的方案数。做一下插头dp的模板。0表示这个位置不可以放木板(也就是已经放上了木板),1表示这个位置可以放木板(也就是没放木板)。转移有两种1.当前位置上方的格子如果没放,那么在这个格子放竖着的,如果放了,什么也不放2.当前位置上方放了,左面没放,那么可以放一个横着的。//别看代码长,大部分都是哈希表(虽然这道题用不到,以后呢?)#include#includ原创 2015-11-16 10:39:40 · 549 阅读 · 0 评论 -
bzoj 4318 osu 【三次方问题】【dp】
二次方的问题可以说是经典了,三次方yy一下也就出来了。(x+1)^3=x^3+3x^2+3x+1所以维护x^2 x的期望值。注意x^2的期望值不等于x期望值的平方。#include#include#include#include#include#define ll long long#define inf 1e9#define eps 1e-10#define md#d原创 2015-11-20 22:52:38 · 961 阅读 · 0 评论 -
bzoj 2728 与非 【找规律】 【位运算】 【数位dp】
通过与非运算可以组合出and和not,然后and和not可以组合所有的逻辑运算。所以只要有可能,没有表示不出来的数。但是如果所有数都满足st[i]=st[j] 那么这两位无论如何都相等。并查集维护所有相等的类别,数位dp还是不太熟练。01数位dp的本质是枚举所有的非0位,假设它是0,更新答案,然后把它设为1,求之后的答案。#include#include#include#in原创 2015-11-20 23:18:17 · 460 阅读 · 0 评论 -
bzoj 2121 字符串游戏
BX正在进行一个字符串游戏,他手上有一个字符串L,以及其他一些字符串的集合S,然后他可以进行以下操作:对于一个在集合S中的字符串p,如果p在L中出现,BX就可以选择是否将其删除,如果删除,则将删除后L分裂成的左右两部分合并。举个例子,L='abcdefg' , S={'de'},如果BX选择将'de'从L中删去,则删后的L='abcfg'。现在BX可以进行任意多次操作(删的次数,顺序都随意),他想原创 2015-11-16 10:40:20 · 886 阅读 · 0 评论 -
bzoj 2660 最多的方案 | 斐波那契数列
用一个二进制串表示一个合法的方案,其中第i个数表示第i个斐波那契数是否选。例如16表示可以是001001 3+13001110 3+5+8110001 1+2+13110110 1+2+5+8可以看出,由贪心找出的3+13转化为其它合法方案就是当前位变成0,它左边的两个0变成1。每两个1之间的0互相独立,即不可能13分裂出的1到3的前面。于是f[i][0/1]表示贪心得到的第i个斐波那契数是否选,原创 2015-11-16 10:39:48 · 848 阅读 · 0 评论 -
bzoj 3679 数字之积
比较裸(shen)的数位dp。可以预处理出来所有可以到达的乘积,然后dp。我会说我重变量名wa了好久吗?我会说我dp没错,预处理错了又wa了好久吗?因为重变量,代码很不优美。#include#include#include#include#include#include#include#define md#define ll long long//#define inf (int) 1e9#def原创 2015-11-16 10:38:29 · 569 阅读 · 0 评论 -
bzoj 1187 神奇的游乐园 | 插头dp
很久以前写过一次,现在用hash再写一遍。打重变量名了。#include#include#include#include#include#define md#define ll long long#define inf (int) 1e9#define eps 1e-8#define N 5010using namespace std;int a[110][10];struct ha{ int s原创 2015-11-16 10:39:45 · 408 阅读 · 0 评论 -
bzoj 1060 时态同步 水题?神题?
一看好水-》敲完Wa-》一个小时没看出错-》数据错了此题的f要开int,因为标程开的int,然而ans要开long long#include#include#include#include#include#define ll long long#define inf 1e9#define eps 1e-10#define md#define N 500010using namespace std;原创 2015-11-16 10:40:06 · 407 阅读 · 0 评论 -
bzoj 1026 windy数|数位dp
终于明白数位dp了,就是一个模板,直接贴代码 #include#include#include#include#include#define md#define ll long long#define inf (int) 1e9#define eps 1e-8#define Nusing namespace std;int f[15][15][2];int a[15];char st[15原创 2015-11-16 10:36:53 · 378 阅读 · 0 评论 -
bzoj 4001 概率论
令f[i]表示i个节点的二叉树种数,则f[x]=sigma(i=0->i-1)(f[i]*f[x-i-1])令g[i]表示i个节点的二叉树的各种方案的叶子节点总数和,则g[x]=2*sigma(i=0->x-1)g[i]*f[x-i-1]打表找规律具体的,找f[i]/g[i]的规律,将f[i]/g[i]约分之后通分成分子分母分别单调递增,规律就很显然了。代码没什么可贴的原创 2015-11-16 10:37:25 · 356 阅读 · 0 评论 -
bzoj 1875 HH去散步
看到1e9的数据范围,不难想到是矩乘,但是按照边去设状态确实很神。然后f[i][j]表示第j-1步走边j的方案数,我一直没看出来要减一。#include#include#include#include#include#define md 45989#define ll long long#define inf (int) 1e9#define eps 1e-8#define N 45#define原创 2015-11-16 10:38:32 · 357 阅读 · 0 评论 -
bzoj 2306 幸福路径 【floyd】【dp】
期望值最大的dp,转移有环开始在想强连通分量缩点之后,块内高斯消元+拓扑图dp。但是高斯消元没有max的转移。所以用了处理有环最大值的方法:floyd总结一下:处理转移有环的方法:最短路(单源 floyd)主要是求max/min高斯消元 主要是求期望。强连通分量缩点 主要是题内有明显提示或强连通分量内部有特殊性质。#include#include#inclu原创 2015-11-20 22:57:47 · 625 阅读 · 0 评论 -
bzoj 2435 道路修建
这真的是noi题吗?orz dfs能过的柏神。(我的代码并不能通过,但是是对的)考场上还是老老实实bfs吧 #include#include#include#include#include#define md#define ll long long#define inf (int) 1e9#define eps 1e-8#define N 1000010using namespac原创 2015-11-16 10:37:38 · 379 阅读 · 0 评论 -
bzoj 3743 kmap
这道题首先找出来虚树,算出虚树的边的总长。这样虚树内的点的答案就是总长*2-虚树中距它最远点的距离。然后距它最远点的距离是直径上的点。虚树外的点就是找到距它最近的虚树内的点的答案加上这个距离。开始的时候我按照奶牛集会的那道题写了。#include#include#include#include#include#define ll long long#define inf 1e9#define ep原创 2015-11-16 10:40:11 · 684 阅读 · 0 评论 -
bzoj 3997 组合数学
最小链覆盖等于最大独立集。两个点不相互可达则一个数在另一个数的左下角,dp即可。#include#include#include#include#include#define ll long long#define inf 1e9#define eps 1e-10#define md#define N 1010using namespace std;ll f[N][N],a[N][N];int m原创 2015-11-16 10:40:35 · 418 阅读 · 0 评论 -
bzoj4008[HNOI2015]亚瑟王
f[i][j]表示给[i,n]区间的卡牌j次机会的概率。单独考虑每一张牌的情况,而不是单独考虑每一轮的情况f[0][r]=1;f[i][j]=f[i-1][j]*sig(i-1,j)+f[i-1][j+1]*(1-sig(i-1,j+1))其中sig[i][j]表示第i张牌,j次机会,都没有发出去的概率。注意数组清0#include#include#include#inc原创 2015-11-28 22:51:30 · 919 阅读 · 0 评论