DP
風吹过
这个作者很懒,什么都没留下…
展开
-
hdu 4632 Palindrome subsequence(DP)
注意到任意一个回文子序列收尾两个字符一定是相同的,于是可以区间dp,用dp[i][j]表示原字符串中[i,j]位置中出现的回文子序列的个数,有递推关系:dp[i][j]=dp[i+1][j]+dp[i][j-1]-dp[i+1][j-1]如果i和j位置出现的字符相同,那么dp[i][j]可以由dp[i+1][j-1]中的子序列加上这两个字符构成回文子序列,也就是dp[i][j]+=dp原创 2013-08-01 21:29:42 · 864 阅读 · 0 评论 -
hdu 4618 Palindrome Sub-Array
数据弱 dp 暴力都能过dp:d(i,j,k)表示左上角坐标为(i,j),k为正方形边长初始化 d(i,j,0)=1 d(i,j,1)=1如果d(i+1,j+1,k-2)=1,且上下两个外围的相等且回文,左右两个外围的相等且回文;d(i,j,k)=1,否则d(i,j,k)=0#include #include int a[310][310];b原创 2013-07-27 11:26:22 · 501 阅读 · 0 评论 -
hdu 4649 Professor Tian
反状态压缩——把数据转换成20位的01来进行运算因为只有20位,而且&,|,^都不会进位,那么一位一位地看,每一位不是0就是1,这样求出每一位是1的概率,再乘以该位的十进制数,累加,就得到了总体的期望。对于每一位,状态转移方程如下:f[i][j]表示该位取前i个数,运算得到j(0或1)的概率是多少。f[i][1]=f[i-1][1]*p[i]+根据不同运算符和第i位原创 2013-08-07 10:49:42 · 490 阅读 · 0 评论 -
zoj 3640 Help Me Escape(概率DP)
题目意思: 一个吸血鬼,每天有n条路走,每次随机选一条路走,每条路有限制,如果当这个吸血鬼的能力大于某个值c[i],那么只需要花费ti(ti = (1.0 + sqrt(5.0))/2 * c[i] * c[i]) 天的时间就可以逃出去,否则,花费1天的时间,吸血鬼的能力增加c[i],花费1天的时间,然后继续下一天的尝试。求逃出去的期望。 设dp[v] ,表示当能力值为v的时的期望原创 2013-08-19 17:12:06 · 514 阅读 · 0 评论 -
poj 2096 Collecting Bugs(概率dp入门)
逆着递推求解题意:(题意看题目确实比较难道,n和s都要找半天才能找到)一个软件有s个子系统,会产生n种bug某人一天发现一个bug,这个bug属于一个子系统,属于一个分类每个bug属于某个子系统的概率是1/s,属于某种分类的概率是1/n问发现n种bug,每个子系统都发现bug的天数的期望。求解:dp[i][j]表示已经找到i种bug,j个系统的bug,达到目标状态的原创 2013-08-21 17:15:11 · 542 阅读 · 0 评论 -
poj 2068 NIM (博弈DP)
题目:有两个队,每个队有n个人,每个人每次有数量限制,取最后一块的输,问获胜策略。解析:dp[i][j]表示第i个人取,还有j块石头 。当j为0的时候,没有石头,这时候是胜,为1。后继中有必败态的为必胜态。#include#include#includeusing namespace std;int a[50],dp[30][10000],n;int dfs(原创 2013-10-06 15:48:08 · 753 阅读 · 0 评论 -
最长公共上升子序列 LCIS
这里总结一个O(nm)的算法。 设题目给出a[],b[]两个序列。f[j]表示b序列到j的时候,与a[??]序列构成最长公共上升子序列的最优解。其中a[??]序列,从1到n枚举过来。 如果某一个时刻a[i]==b[j],那么显然,我们就应该在0到j-1中,找一个f值最大的来更新最优解。这和求上升子序列是思想是一样的。另外,在枚举b[j]的时候,我们顺便保存一下小于a[i]的f值转载 2014-03-26 22:22:51 · 452 阅读 · 0 评论