随笔分类 -  DP

收录各类DP...
摘要:题意:用若干条回路覆盖01矩阵里面所有的1的方案数方法:多回路问题,需要将插头的有无加入状态里,然后沿轮廓线转移即可。简单好写。#include using namespace std;#ifndef ONLINE_JUDGE#include "local.h"#endif // ONLINE_JU... 阅读全文
posted @ 2015-12-19 01:53 jklongint 阅读(220) 评论(0) 推荐(0)
摘要:题意:需要打印n个正整数,1个数要么单独打印要么和前面一个数一起打印,1次打印1组数的代价为这组数的和的平方加上常数M。求最小代价。 思路:如果令dp[i]为打印前i个数的最小代价,那么有 dp[i]=min(dp[j]+(sum[i]-sum[j])2+M),j<i 直接枚举转移是O(n2)的,然 阅读全文
posted @ 2015-12-06 02:48 jklongint 阅读(215) 评论(0) 推荐(0)
摘要:题意:给1棵N(≤500,000)个节点的树,每条边边权为1,求距离每个点距离不超过K(K≤10)的点的个数的xor和。思路:由于K很小,可以考虑把距离作为状态的一部分,然后研究父子之间状态的联系。令ans[i][j]表示与i的距离为j的点的个数,那么ans[i][j]由两部分构成,一部分来源于子树... 阅读全文
posted @ 2015-12-06 01:10 jklongint 阅读(545) 评论(0) 推荐(0)
摘要:题目原意:给一棵n个点的树添加边,给定度函数f(d)为一个点的度的函数,求所有点的度函数的和思路:函数只与点的度有关,而与点无关,n个点的树有n-1条边,共产生2(n-1)个度,每个点至少有1个度。可以证明,一个合法的分配方式对应一棵树那么先对每个点各分配1个度,考虑把n-2个度分配给n个点由于结果... 阅读全文
posted @ 2015-11-01 20:11 jklongint 阅读(605) 评论(0) 推荐(0)
摘要:题意:一堆食物,有价值、空间、数量三种属性,一些卡车,有空间,价格,数量三种属性。求最少的钱(不超过50000)买卡车装下价值大于等于给定价值的食物,食物可以拆开来放。思路:这题的关键是给定的条件:食物可以拆开来放。这个条件使得卡车和食物可以分开考虑,然后通过空间这个属性联系在一起。做两遍多重背包即... 阅读全文
posted @ 2015-09-14 22:58 jklongint 阅读(316) 评论(0) 推荐(0)
摘要:题意:给一个有向图,从任意点开始,最多走m步,求形成的图案总数。思路:令dp[i][j]表示走j步最后到达i的方法数,则dp[i][j]=∑dp[k][j-1],其中k表示可以直接到达i的点,答案=∑dp[i][j]。关键在于如何减少状态转移的时间,考虑用矩阵加速。构造矩阵:D =,其中a[i][j... 阅读全文
posted @ 2015-08-21 01:36 jklongint 阅读(513) 评论(0) 推荐(1)
摘要:题意:将一个数拆成若干数的和使得它们的最小公倍数最大思路:一个数x可以拆成p1k1+ p2k2 +... +pnkn形式,其中pi是质数或1。对于最小公倍数最大的情况,一定可以表示成这种形式。令dp[i][j]表示考虑前j个质数来构成i的最大公倍数,那么可以得到如下转移方程:dp[i][j]=max... 阅读全文
posted @ 2015-08-20 12:02 jklongint 阅读(166) 评论(0) 推荐(0)
摘要:题意:给一棵树,删边和加边的代价都为1,求把树变成一个圈所花的最小代价。思路:对原树进行删边操作,直到将原树分成若干条链,然后通过在链之间添加边形成圈,由于删边和加边一一对应,且最后需要额外一条边连成圈,所以有:最小代价=(最小链数-1)*2+1=最小链数*2-1。令dp[i][0]表示i不和i的父... 阅读全文
posted @ 2015-08-20 00:20 jklongint 阅读(311) 评论(0) 推荐(0)
摘要:题意:给一个表达式,求所有的计算顺序产生的结果总和思路:比较明显的区间dp,令dp[l][r]为闭区间[l,r]的所有可能的结果和,考虑最后一个符号的位置k,k必须在l,r之间,则l≤k#include #include #include #include #include #include #in... 阅读全文
posted @ 2015-08-18 22:32 jklongint 阅读(287) 评论(0) 推荐(0)
摘要:题意:把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+... 阅读全文
posted @ 2015-08-13 18:24 jklongint 阅读(234) 评论(0) 推荐(0)
摘要:http://codeforces.com/problemset/problem/300/D题意:每一次操作可以选一个正方形,令边长为n,如果n为奇数那么可以从中间画一个十字,分成4个大小相等的边长为(n-1)/2的正方形。给一个正方形,求操作k次后能得到的不同图案的个数思路:令f(s,k)表示边长... 阅读全文
posted @ 2015-08-13 09:55 jklongint 阅读(355) 评论(0) 推荐(0)
摘要:题意:给一个长度为16的字符串,每次从里面删掉一个回文序列,求最少需要几次才能删掉所有字符思路:二进制表示每个字符的状态,那么从1个状态到另一个状态有两种转移方式,一是枚举所有合法的回文子序列,判断是否是当前状态的子状态,再转移,二是枚举当前状态的所有子状态来转移。前者最坏复杂度O(2^16*2^1... 阅读全文
posted @ 2015-08-12 15:21 jklongint 阅读(278) 评论(0) 推荐(0)
摘要:题意:给一个二进制码,其中有一些位上为'?',对每个问号确定是'0'还是'1',最后以它对应的格雷码来取数,第i位为1则取第i个数,求取得的数的和的最大值。思路:二进制码B转换成格雷码G的方法是,Gi=Bi^Bi+1,Gn=Bn。所以第i位如果为'?',那么选'1'还是'0'只会影响邻位,于是用dp... 阅读全文
posted @ 2015-08-12 14:07 jklongint 阅读(164) 评论(0) 推荐(0)
摘要:题意:给一个长度为m的序列,从里面选出一些数,相对位置不发生变化,并满足a[i]=a[n-i],a[1]a[l]=a[r]&&l//#include//#include//#include//#include//#include//#include//#include//#include//#inc... 阅读全文
posted @ 2015-07-28 06:15 jklongint 阅读(235) 评论(0) 推荐(0)
摘要:题意:给一个n*m的区域,里面有一些障碍物,往里面放2*3和3*2的矩形,矩形之间不能重叠,不能覆盖到障碍物,求能放置的最大个数。(n#include#include#include#include#include#include#include#include#includeusingnamesp... 阅读全文
posted @ 2015-07-27 03:30 jklongint 阅读(379) 评论(0) 推荐(0)
摘要:题意:在一个有字母和数字组成的矩形里面找最大的等腰对称直角三角形,直角边分别平行于矩形边,对称的意思是对称轴两边的字符相同。思路:首先考虑一种情况,三角形的直角边在右方和下方,对于其它情况可以通过旋转矩形来得到。这样令dp[i][j]表示直角点在(i,j)的最大三角形的直角边的长度,不难得到dp[i... 阅读全文
posted @ 2015-06-05 21:43 jklongint 阅读(358) 评论(0) 推荐(0)
摘要:思路:容易知道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)... 阅读全文
posted @ 2015-06-05 04:32 jklongint 阅读(306) 评论(0) 推荐(0)
摘要:题意: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... 阅读全文
posted @ 2015-06-04 01:04 jklongint 阅读(235) 评论(0) 推荐(0)
摘要:题意:给一棵树的边标上0或1,求以节点i为源点,其它点到i的唯一路径上的1的边数不超过1条的方案数,输出所有i的答案。思路:令f[i]表示以节点i为源点,只考虑子树i时的方案数,ans[i]为最后答案,fa[i]为i的父亲,则不难得出以下转移方程:f[i] =∏(1 + f[v]),v是i的儿子 ... 阅读全文
posted @ 2015-05-27 21:59 jklongint 阅读(270) 评论(0) 推荐(0)
摘要:题意:求从区间[L, R]内有多少个数是平衡数,平衡数是指以10进制的某一位为中心轴,左右两边的每一位到中心轴的距离乘上数位上的值的和相等。0=0)前i位且左边比右边的加权和已经多j的方案数,枚举当前第i位放的数k,那么dp[p][i][j]=∑dp[p][i-1][j+(p-i+1)*k]。求出d... 阅读全文
posted @ 2015-05-26 23:25 jklongint 阅读(262) 评论(0) 推荐(0)