
动态规划
blzorro
这个作者很懒,什么都没留下…
展开
-
HDU 4632 Palindrome subsequence(区间合并动态规划)
题意:给定T串只含小写字母的字符串,对于每串,输出回文字串的数目模10007思路:区间合并,对于从第i个字符到第j个字符的串里面 (1)如果str[i]!=str[j],则dp[i][j]=dp[i+1][j]+dp[i][j-1]-dp[i+1][j-1],即回文串在[i,j-1]的情况数加上[i+1,j]的情况数,再减去两种重叠部分的情况数,即属于[i+1,j-1]的原创 2013-08-02 15:25:50 · 555 阅读 · 0 评论 -
软件能力认证题---拼图(状态压缩DP+矩阵快速幂)
题意: 给定n*m的棋盘(1思路:m的范围只有1状态表示:0代表此处留空,1代表此处被填满。01序列压缩成一个int型来表示一行的填放情况。(例如:状态为4,则代表100,即第一列填满,第二第列三空)递推矩阵是长这样的:边界条件:其中,t = 2^M代表将前i-1行填满,且第i行放置了状态s时的总方案数。代表上一行原本放置了状态s2的前提下,当前行放置骨原创 2014-12-07 11:55:13 · 1997 阅读 · 0 评论 -
HDU 3001 Travelling (状态压缩DP)
题意:有n个点(n可能有重边),问从任一点走遍整个图的最短费用和,其中每个点最多只能经过两次。思路:tsp问题,状压dp。三进制压缩一个点已被访问的次数作为状态s,dp[s][i]代表状态s下最后一个到达的点位i的最小费用。递推方程:在dp[s][i]已计算出来的情况下,枚举下一个到达的点k,那么dp[news][k] = min{ dp[news][k]+Edge[i][k],dp[news原创 2014-02-08 20:16:00 · 1101 阅读 · 0 评论 -
POJ 3254 Corn Fields (状态压缩DP)
题意:一个矩阵里有很多格子,每个格子有两种状态,可以放牧和不可以放牧,可以放牧用1表示,否则用0表示,在这块牧场放牛,要求两个相邻的方格不能同时放牛,即牛与牛不能相邻。问有多少种放牛方案(一头牛都不放也是一种方案)思路:dp[i][s] 代表第i行状态为s(s是每个位置放与不放组成的0-1序列对应的十进制数)时所能得到的方案总数递推方程:dp[i][s] = Σdp[i-1][f]原创 2013-12-04 20:14:07 · 752 阅读 · 0 评论 -
HDU 4681 String (动态规划)
题意:给定字符串A,B,C,寻找一个最长的D,满足以下条件:1)D是A的子序列2)D是B的子序列3) C是D的子串 (子串是指连续的子字符串)求出D的长度思路:先对A,B正向求最长公共子序列记录在f(i,j)中,再对A、B逆向求最长公共子序列记录在g(i,j)中。在A和B中寻找子序列C,对于C在A、B中的每个起点,只需要找出C在其中结束最近的位置就可以了。例如A是abbb中原创 2013-08-15 16:44:18 · 1274 阅读 · 0 评论 -
UVA 10891 Game of Sum (动态规划)
题意:有一个长度为n的整数序列,A和B轮流取数,A先取,每次可以从左端或者右端取一个或多个数,所有数都被取完时游戏结束,然后统计每个人取走的所有数字之和作为得分,两人的策略都是使自己的得分尽可能高,并且都足够聪明,求A的得分减去B的得分的结果。思路:很容易想到一个复杂度是O(n^3)的方法,设dp(i,j)为第i个到第j个数时,先手能获得的最大分数,注意到对于一段整数序列,先手的得分与后手的得原创 2013-08-16 11:34:16 · 1517 阅读 · 0 评论 -
HDU 1505 & POJ 1964 City Game (递推+扫描法)
题意:一个矩阵,有些格子是F,有些是T,要你找到最大的子矩阵使得矩阵内全是F思路:直接枚举每个子矩阵,显然复杂度是O(m^3 n^3),显然TLE。 我们可以使用扫描法:用up(i,j),left(i,j),right(i,j),分别表示格子(i,j)悬垂线(悬垂线就是指这个格子往上走遇到第一个不是F的格子之前的线段)的长度,原创 2013-08-15 03:48:20 · 1748 阅读 · 0 评论 -
ZOJ 3123 Subsequence (动态规划)
题意:有n个正整数组成一个序列。给定整数S,求长度最短的连续序列,使他们的和大于或等于S思路:题目数据范围10sum(i)为前i个数字之和,f(i)代表以第i个数字为结尾的连续子序列长度,要求这个子序列之和大于或等于S而且长度最小。(1)如果sum(i)(2)如果sum(i)>=S,那么只需要找到一个最大的j,使得sum(i)-sum(j)>=S即可,那么f(i)=i-j。注意原创 2013-08-14 12:45:54 · 1684 阅读 · 0 评论 -
FZU 2129 子序列个数 (动态规划)
题意:子序列的定义:对于一个序列a=a[1],a[2],......a[n]。则非空序列a'=a[p1],a[p2]......a[pm]为a的一个子序列,其中1<=p1<p2<.....<pm<=n。例如4,14,2,3和14,1,2,3都为4,13,14,1,2,3的子序列。对于给出序列a,请输出不同的子序列的个数。(由于答案比较大,请将答案mod 1000000007)思路:原创 2013-08-11 20:20:25 · 1592 阅读 · 0 评论 -
UVA 10859 Placing Lampposts (动态规划)
题意:一个n个点m条边的无向无环图,在尽量少的节点上放灯,使得所有边都被照亮,每盏灯将照亮以它为一个端点的所有边,在总灯数最小的前提下,被两盏灯同时照亮的边数应尽量大。思路:无向无环图就是“森林”,常用树形dp,本题要优化的目标有两个,放置的灯数a应尽量少,被两盏灯同时照亮的边数b应尽量大,为了统一,我们把b替换成”恰好被一盏灯照亮的边数c尽量小“。然后设x=Ma+c为最终的优化目标,M是一个原创 2013-08-21 15:34:34 · 885 阅读 · 0 评论 -
UVA 10635 Prince and Princess (动态规划)
题意:有两个长度分别为p+1和q+1的序列,每个序列中的元素互不相同,且都是1到n^2之间的整数(2思路:原本是LCS问题,但是普通的LCS算法复杂度是O(pq)显然TLE。注意到元素均不相同,可以把A中的元素重新编号为1到p+1。例如样例中的A={1,7,5,4,8,3,9},B={1,4,3,5,6,2,8,9},那么把A重新编号为{1,2,3,4,5,6,7},则B={1,4,6,3,0原创 2013-08-19 17:55:39 · 783 阅读 · 0 评论 -
POJ 3517 And Then There Was One (递推,约瑟夫问题变形)
题意:1到n这n个数排成一圈,第一次删除m,以后每k个数删除一次,求最后一个被删除的数。思路:看了刘汝佳的书,怎么都看不懂,最后自己按照书上的大体思路,自己推了一个和书上不同的公式过了。。设有n个数字分别是0到n-1,第一次删除0,以后每k个数删除一次,最后被删除的数字是f(n)。那么,f(1)=0,f(n)=(f(n-1)+k-1)%(n-1)+1。因为我们可以把删数字的过程看成这样原创 2013-08-19 16:58:35 · 1118 阅读 · 0 评论 -
HDU 1554 Palindromes(回文串+动态规划)
题意:给定若干字符串,输出每个字符串的回文子串个数,这里回文串在原字符串中必须是连续的。思路:用f(i,j)代表str[i....j]是不是回文串,容易得出递推式f(i,j)=f(i+1,j-1) && str[i]==str[j],然后将所有的f(i,j)加起来就是答案了。(注意f(i,i)=1和i+1>j-1的情况)但是这个题目开5000*5000的数组会MLE。于是注意到每次f(i,原创 2013-08-04 15:30:59 · 878 阅读 · 0 评论 -
HDU 4639 Hehe(字符串动态规划)
题意:给定一串T串字符串,每个hehe可能有两种意思,要么是就是hehe,要么是wqnmlgb,现在要问这串字符串的意思的可能数模10007思路:对于连续的he,可以推导,f[i]代表连续i个he表达意思的可能数,f[i]=f[i-1]+f[i-2]。然后,将不同的连续he串之间的可能数相乘即可。(组合原理)(其实不是通过直接观察得出满足斐波那契数列的,可以推导的)连续i个he表达可能原创 2013-08-02 15:56:35 · 779 阅读 · 0 评论