随笔分类 - DP
收录各类DP...
摘要:题意:用若干条回路覆盖01矩阵里面所有的1的方案数方法:多回路问题,需要将插头的有无加入状态里,然后沿轮廓线转移即可。简单好写。#include using namespace std;#ifndef ONLINE_JUDGE#include "local.h"#endif // ONLINE_JU...
阅读全文
摘要:题意:需要打印n个正整数,1个数要么单独打印要么和前面一个数一起打印,1次打印1组数的代价为这组数的和的平方加上常数M。求最小代价。 思路:如果令dp[i]为打印前i个数的最小代价,那么有 dp[i]=min(dp[j]+(sum[i]-sum[j])2+M),j<i 直接枚举转移是O(n2)的,然
阅读全文
摘要:题意:给1棵N(≤500,000)个节点的树,每条边边权为1,求距离每个点距离不超过K(K≤10)的点的个数的xor和。思路:由于K很小,可以考虑把距离作为状态的一部分,然后研究父子之间状态的联系。令ans[i][j]表示与i的距离为j的点的个数,那么ans[i][j]由两部分构成,一部分来源于子树...
阅读全文
摘要:题目原意:给一棵n个点的树添加边,给定度函数f(d)为一个点的度的函数,求所有点的度函数的和思路:函数只与点的度有关,而与点无关,n个点的树有n-1条边,共产生2(n-1)个度,每个点至少有1个度。可以证明,一个合法的分配方式对应一棵树那么先对每个点各分配1个度,考虑把n-2个度分配给n个点由于结果...
阅读全文
摘要:题意:一堆食物,有价值、空间、数量三种属性,一些卡车,有空间,价格,数量三种属性。求最少的钱(不超过50000)买卡车装下价值大于等于给定价值的食物,食物可以拆开来放。思路:这题的关键是给定的条件:食物可以拆开来放。这个条件使得卡车和食物可以分开考虑,然后通过空间这个属性联系在一起。做两遍多重背包即...
阅读全文
摘要:题意:给一个有向图,从任意点开始,最多走m步,求形成的图案总数。思路:令dp[i][j]表示走j步最后到达i的方法数,则dp[i][j]=∑dp[k][j-1],其中k表示可以直接到达i的点,答案=∑dp[i][j]。关键在于如何减少状态转移的时间,考虑用矩阵加速。构造矩阵:D =,其中a[i][j...
阅读全文
摘要:题意:将一个数拆成若干数的和使得它们的最小公倍数最大思路:一个数x可以拆成p1k1+ p2k2 +... +pnkn形式,其中pi是质数或1。对于最小公倍数最大的情况,一定可以表示成这种形式。令dp[i][j]表示考虑前j个质数来构成i的最大公倍数,那么可以得到如下转移方程:dp[i][j]=max...
阅读全文
摘要:题意:给一棵树,删边和加边的代价都为1,求把树变成一个圈所花的最小代价。思路:对原树进行删边操作,直到将原树分成若干条链,然后通过在链之间添加边形成圈,由于删边和加边一一对应,且最后需要额外一条边连成圈,所以有:最小代价=(最小链数-1)*2+1=最小链数*2-1。令dp[i][0]表示i不和i的父...
阅读全文
摘要:题意:给一个表达式,求所有的计算顺序产生的结果总和思路:比较明显的区间dp,令dp[l][r]为闭区间[l,r]的所有可能的结果和,考虑最后一个符号的位置k,k必须在l,r之间,则l≤k#include #include #include #include #include #include #in...
阅读全文
摘要:题意:把n个数(1-9)放到A集合和B集合里面去,使得A集合里面的数的数根为a,B集合里面的数的数根为b,也可以只放在A或B任一个集合里面。求方法总数。比如A={2,4,5},则A的数根为[2+4+5]=[11]=[2]=2思路:一个数为a,则它的数根b=(a-1)%9+1=(digit-1)%9+...
阅读全文
摘要:http://codeforces.com/problemset/problem/300/D题意:每一次操作可以选一个正方形,令边长为n,如果n为奇数那么可以从中间画一个十字,分成4个大小相等的边长为(n-1)/2的正方形。给一个正方形,求操作k次后能得到的不同图案的个数思路:令f(s,k)表示边长...
阅读全文
摘要:题意:给一个长度为16的字符串,每次从里面删掉一个回文序列,求最少需要几次才能删掉所有字符思路:二进制表示每个字符的状态,那么从1个状态到另一个状态有两种转移方式,一是枚举所有合法的回文子序列,判断是否是当前状态的子状态,再转移,二是枚举当前状态的所有子状态来转移。前者最坏复杂度O(2^16*2^1...
阅读全文
摘要:题意:给一个二进制码,其中有一些位上为'?',对每个问号确定是'0'还是'1',最后以它对应的格雷码来取数,第i位为1则取第i个数,求取得的数的和的最大值。思路:二进制码B转换成格雷码G的方法是,Gi=Bi^Bi+1,Gn=Bn。所以第i位如果为'?',那么选'1'还是'0'只会影响邻位,于是用dp...
阅读全文
摘要:题意:给一个长度为m的序列,从里面选出一些数,相对位置不发生变化,并满足a[i]=a[n-i],a[1]a[l]=a[r]&&l//#include//#include//#include//#include//#include//#include//#include//#include//#inc...
阅读全文
摘要:题意:给一个n*m的区域,里面有一些障碍物,往里面放2*3和3*2的矩形,矩形之间不能重叠,不能覆盖到障碍物,求能放置的最大个数。(n#include#include#include#include#include#include#include#include#includeusingnamesp...
阅读全文
摘要:题意:在一个有字母和数字组成的矩形里面找最大的等腰对称直角三角形,直角边分别平行于矩形边,对称的意思是对称轴两边的字符相同。思路:首先考虑一种情况,三角形的直角边在右方和下方,对于其它情况可以通过旋转矩形来得到。这样令dp[i][j]表示直角点在(i,j)的最大三角形的直角边的长度,不难得到dp[i...
阅读全文
摘要:思路:容易知道G(x)=6x,H(x)=6F(x)。此题的关键是求出F(x)的通项,要求F(x)的通项,先建立递推式:F(x)=1/6 * (F(x-1)+1) + 5/6 * (F(x-1)+1+F(x)-1)。红色部分的意思是:假设已经连续出现x-1个了,若再出现一个同样的,总共花费F(x-1)...
阅读全文
摘要:题意:1-n围成1圈,从1出发,第i次走a[i]步,问走m次后出现在[L,R]的概率L dp[i+1][(j+a[i])%n] 和 dp[i+1][(j-a[i]+n*a[i])%n]。由于取模运算的大量存在,直接算会TLE,需要预处理取模的结果。时间复杂度O(nm)。代码1:12345678910...
阅读全文
摘要:题意:给一棵树的边标上0或1,求以节点i为源点,其它点到i的唯一路径上的1的边数不超过1条的方案数,输出所有i的答案。思路:令f[i]表示以节点i为源点,只考虑子树i时的方案数,ans[i]为最后答案,fa[i]为i的父亲,则不难得出以下转移方程:f[i] =∏(1 + f[v]),v是i的儿子 ...
阅读全文
摘要:题意:求从区间[L, R]内有多少个数是平衡数,平衡数是指以10进制的某一位为中心轴,左右两边的每一位到中心轴的距离乘上数位上的值的和相等。0=0)前i位且左边比右边的加权和已经多j的方案数,枚举当前第i位放的数k,那么dp[p][i][j]=∑dp[p][i-1][j+(p-i+1)*k]。求出d...
阅读全文

浙公网安备 33010602011771号