动态规划
文章平均质量分 70
enmity_dark
这个作者很懒,什么都没留下…
展开
-
[dp] hdu 5282 Senior's String
题意:学姐姐非常喜欢字符串,所以学弟送给了她两个字符串作为礼物。两个字符串分别为X,Y。她非常开心,但在开心之余她还想考考学弟。她定义L为X与Y的最长公共子序列的长度(子序列在字符串内不一定连续,一个长度为L的字符串有2L个子序列,包括空子序列)。现在学姐姐取出了X的所有长度为L的子序列,并要求学弟回答在这些子序列中,有多少个是Y的子序列。因为答案可能很大,所以原创 2015-09-17 17:38:33 · 463 阅读 · 0 评论 -
[dp] upcpj 2221 Mountain Subsequences
题意:给长度为N的字符串,只存在小写字母。问你山形的子序列有多少种,这里是子序列不是子串。所谓的山形就是严格的递增到递减。思路:dp[i][j][k]代表前i个字母,前面的字母是j的k状态有多少种。状态0为什么都没,1为上山,2为下山,3为答案状态。滚动数组维护就好了。代码:#include"cstdlib"#include"cstdio"#include"原创 2015-04-14 09:52:21 · 541 阅读 · 0 评论 -
[AC自动机+dp+高精度] poj 1625 Censored!
题意:给一个长度为N的字符串,表示有N个字符可用。再给p个不能含有的病毒串。为你长度为M的串不含有任意一个病毒串的方案数。思路:由于不需要取模,50^50需要用到高精度。因为题目的字符串大于32所以可以直接scanf输入。输入完map一下就好了。就是裸的自动机dp了。代码:#include"stdio.h"#include"algorithm"#incl原创 2015-04-14 10:13:16 · 624 阅读 · 0 评论 -
[dp+组合数学] hihocoder 1075 开锁魔法III
题意:中文题~思路:首先需要处理的就是把所有的环找出来环的意思就是这个环里面只要有一个盒子被打开了,其他盒子就都被打开了。比如样例。就是有两个环(1,2,5) 和 (3,4)并记录环内盒子的总数。这样就转换成了这样的一个问题了。给n堆东西,每堆有ai个,问现在取k次,保证每堆至少取1个的方案数。然后总的方案数是C[n][k]。概率一除就好了。那么这个方案数怎么求原创 2015-03-30 12:15:34 · 1056 阅读 · 0 评论 -
[数位dp+二分] zoj Generalized Palindromic Number
题意:找一个小于N的最大的且符合题意的数。题意的数为,通过缩减后是回文的数,所谓的缩减就是相同连续的数看做一个数,如“155451111”其实就是“15451”是符合题意的数。思路:通过数位dp,然后二分求解。dp[i][j][k]代表第i位,已经放了j个数,最后长度是k的缩减回文数有几个。然后需要一个ok[]数组代表放的数是什么,如果连续放相同的数就等于没放数。遍历所原创 2015-03-11 17:44:38 · 629 阅读 · 0 评论 -
[AC自动机+数位dp] zoj 3494 BCD Code
题意:需要将十进制数转换成二进制的BCD码。例如127=0001 0010 0111。然后给你N个病毒串,问十进制A~B范围内,转换成BCD码不含有任何一个病毒串的数有多少个。思路:将这自动机和数位dp结合起来真是很巧妙。其实也不难想。对于数位dp来说,我每次放i到某一位上的时候,其实就是进行了相应的节点移动。比如我要放一个1,其实就是从当前节点往后顺着走了0->0->0-原创 2015-03-10 09:52:07 · 502 阅读 · 0 评论 -
[AC自动机+状压dp] hdu 4534 郑厂长系列故事——新闻净化
题意:中文的题目,意思就是说有很多串,每个串都有权值,权值为999的串必须出现,-999的串必须不出现。权值在-999~999之间。然后必须出现的串不超过8个。然后给一个全为小写目标串,问最少需要删除多少个字母才能够保证必须出现的串都出现,次数一样保证权值最大。输出次数和权值。然后根据样例,那些必须出现的串,其实权值是0。思路:很明显一开始建自动机构成trie图,但是需要注原创 2015-03-10 09:28:57 · 1948 阅读 · 0 评论 -
[AC自动机+dp] hdu 2457 DNA repair
题意:给N个单词,再给一个串str (只含A、G、C、T)问对于str要至少修改几个字符能不含有N个单词思路:建立trie图,做自动机dpdp[i][j] 代表走过str的i个字母在j节点至少需要修改几个字符 trie *p=node[j]->next[k]; if(p->mark) continue; //不可达 dp[i][p->id]=min(dp[i][原创 2014-10-15 12:05:20 · 766 阅读 · 0 评论 -
关于概率dp的个人理解与总结
首先,概率dp主要解决的是关于概率问题和期望问题的求解。原创 2014-08-07 19:31:21 · 4158 阅读 · 0 评论 -
[AC自动机+状压dp] hdu 2825 Wireless Password
题意:给n,m,k ,再给出m个单词问长度为n的字符串,至少在m个单词中含有k个的组成方案有多少种。思路:由于m最大是10,所以可以采取状压的思想首先建立trie图,在每个单词的结束节点标记一个mark=(1然后需要注意的,对于每个节点,应该顺着fail指针遍历一遍,把所有的mark取一个并集。因为就是如果单词出现包含的话,比如 she和he 我拿了she,其实等于原创 2014-10-15 12:12:33 · 725 阅读 · 0 评论 -
[AC自动机+dp+记录路径] hdu 2825 Ring
题意:给N个长度,M个单词,每个单词有权值输出长度不大于N的权值和最大的单词代价相同输出长度短的,长度相同输出字典序最小思路:开一个字符串数组,暴力存储每个节点的单词!其他思路和dp都一样注意:如果和为零的话输出空串。代码:#include"cstdlib"#include"cstdio"#include"cstring"#include"cmath"#原创 2014-10-21 11:10:15 · 747 阅读 · 0 评论 -
[博弈dp] hdu 4778 Gems Fight!
题意:给出g种颜色的宝石,然后有B个背包,S代表到时候每种颜色的宝石凑齐S个能变成一个魔法石然后B行数输入,每个包里有哪些宝石然后A,B轮流拿包,每个包只能拿一次,拿出包把宝石放地上。如果能变成魔法石则拿走魔法石,下一次还这个人拿包,没变成则换人。魔法石的个数就是获得分数,问两人最优的时候分差是多少。思路:只有21个包,状压dp。然后发现不管顺序如何 最后构成的魔法原创 2014-11-05 11:17:31 · 888 阅读 · 0 评论 -
[AC自动机+spfa+状压dp] hdu 3247 Resource Archiver
题意:给n个本源串,m个病毒串求一个最多的长度的单词包含所有的本源串并不包含任意一个病毒串串均为01串思路:只有10个本源串一开始想的是直接建立完trie图 然后在图上直接spfa结果发现 dis[60005][1030] 超内存了这个时候就要想到其实只有节点的mark值大于0的节点是我们需要用的就是那些含有状压权值的节点那么我们先记录下这些节点是哪些原创 2014-11-01 15:19:39 · 804 阅读 · 0 评论 -
[dp] 蓝桥杯 地宫取宝
题意:中文题而且很短就不说了~思路:四维dp[i][j][l][o] 代表在(i,j)这个位置,拿了o个宝贝,所有宝贝最大值是l的方案数。因为宝贝的价值是0~12 我们的初始状态要是0,所以输入的时候把每个宝贝的价值加1.然后对于每个点,都会有一个不拿的状态,和一个可能拿的状态。直接转换下去就OK了。代码:#include"stdio.h"#include"alg原创 2015-04-08 12:56:17 · 1689 阅读 · 1 评论 -
[数位dp] kuangbinoj 1012 bin巨的数
题意:作为ACM史上年度重量级人物,bin巨目前已经掌握了史上最NB的数,群巨快来仰慕!!我们定义这样一个数,它里面的每一个数字都是成双成对出现 的,but,如果这个数里面存在0那么这也是NB的数,比如11,122122,12035,当然,需要剔除那些首位是0的数。我们的目标就是计算一个区 间内bin巨有多少NB数!思路:简单的数位dp,需要考虑每个数字出现的次数(0,1),是否有前导原创 2015-04-09 17:43:58 · 791 阅读 · 0 评论 -
[数位dp] upcoj 2223 A-Number and B-Number
题意:A数列为,包含7或者能被7整除的数从小到大构成。{a[1]=7,a[2]=14,a[3]=17,a[4]=21,a[5]=27,a[6]=28,a[7]=35,a[8]=37,a[9]=42,a[10]=47};B数列为,是A数列里的数,但不包含第a[i]个A数列里的数列。也就是B数列要去掉 a[7],a[14],a[17]这些要去掉。{b[1]=7,b[2]=14,原创 2015-04-09 17:59:51 · 734 阅读 · 0 评论 -
[dp] hdu 5492 Find a path
题意:从左上角走到右下角,路径的最小方差是多少,要求输出方差*(N+M-1)思路:首先我们化简一下方差公式发现答案为(n+m-1)*Σai^2-sum^2 sum为路径取的数的和因为a[i]我们设dp[i][j][k]代表走到(i,j)位置和为k的最小平方和是多少然后转移就好了。代码:#include"cstdlib"#include"cstdio"#in原创 2015-09-28 15:18:31 · 499 阅读 · 0 评论 -
[多校2015.02.1004 dp] hdu 5303 Delicious Apples
题意:在一个长度为L的环上有N棵苹果树,你的篮子容量是K个苹果。每棵苹果树上都有a[i]个苹果。问你从0点出发最少要走多少距离能拿完全部的苹果。思路:我们考虑dp,dp[0][i]代表顺时针取i个苹果的最短距离。dp[1][i]代表逆时针取i个苹果的最短距离。那么设苹果的总是为sum那么ans=dp[0][i]+dp[sum-i] (0代码:#include"原创 2015-07-24 14:42:09 · 755 阅读 · 0 评论 -
[数位dp] hihoCoder 1033 交错和
题意:问你[l,r]区间内的所有满足各个位一加一减最后和是k的全有数的和。思路:数位dpdp[site][sum][p][k] 代表site位,和是sum,当前是加还是减,最后和是k的数的和以及个数也就是存成结构体。然后求的时候ans.cnt=(ans.cnt+cur.cnt)%mod;ans.sum=(ans.sum+cur.sum+cur.cnt*tep)%mod原创 2015-07-20 19:35:21 · 893 阅读 · 0 评论 -
[概率dp] hdu 5378 Leader in Tree Land
题意:给你一颗以1位根节点的树,我们定义对于每个子树,节点权值最大的权值记为这个子树的权值,为你将1~n放到这个树里满足最大权值只有k个的组合数是多少。思路:我们可以知道以每个节点为子树,且根节点权值最大的概率是多少,不是的概率是多少。那么其实问题就变成了 我们在n个物品里面,每个物品拿的概率是pi不拿的概率是1-pi问你拿k个物品的概率是多少然后最后乘n!就好了。中间原创 2015-08-12 20:08:03 · 607 阅读 · 0 评论 -
[区间dp] poj 3280 Cheapest Palindrome
题意:给出增加或减少某个字符的代价。给你一个串,求让它变成回文串的最小代价。思路:和求次数一样。然后注意的是其实增加和减少的性质是一样的。所以对于每个字符,取修改代价最小的就行了。意思就是取增加和减少的最小值。其他就同求次数的区间dp了。代码:#include"cstdlib"#include"cstdio"#include"cstring"#includ原创 2015-05-07 14:27:06 · 556 阅读 · 0 评论 -
[后缀数组+dp/AC自动机+dp+线段树] hdu 4117 GRE Words
题意:给你N个字符串, N(1 问不打乱字符串顺序,从中取若干个字符串,使得前一个串是后一个串的子串,求满足前面调条件的字符串值得和最大,求这个值。思路:其实就是一个很明显的dp。dp[i]代表以第i个字符串结尾的最大权值。但是就是子串这个问题怎么处理。由于这题数据比较水可以用后缀数组处理这个问题。将所有字符串拼接,做sa。每次在height数组里往上和往下寻找原创 2015-04-17 13:25:05 · 914 阅读 · 0 评论 -
[AC自动机+dp] whu oj 1572 I - Cyy and Fzz
题意:给你n个串,求长度为l的串包含n个串个数的期望。思路:自动机dp[i][j][k] 长度为i在节点j状态为k的概率。然后遍历一遍求期望。代码:#include"cstdlib"#include"cstdio"#include"cstring"#include"cmath"#include"queue"#include"algorithm"#include"原创 2015-05-13 23:52:32 · 668 阅读 · 0 评论 -
[dp] poj 3661 Running
题意:一只奶牛可以跑n分钟,疲劳度上限是m。接下来是每分钟可以跑a[i]米。然后对于每分钟可以选择跑或者休息,跑的话疲劳度增加一点疲劳度。休息的话每分钟减少一点疲劳,但是如果选择休息,那么必须休息至疲劳度为零。问n分钟后,疲劳度为0的,所能跑的最远距离。思路:水dp,dp[i][j]代表前i分钟疲劳度为j跑的最远距离。状态转移就是跑或者休息。代码:#incl原创 2015-05-04 20:07:17 · 576 阅读 · 0 评论 -
[dp] zoj 3872 Beauty of Array
题意:给n个数,求连续子序列的和。子序列内的相同元素只计算一次。思路:举例 2 3 3.i=12i=22 33i=32 3 33 33i=1的时候和是2,i=2的时候和是2+3+3=8,i=3的时候和是2+3+3+3=11其实我们只要考虑当前的a[i]被用了多少次就好了。那么我们用used[j]记录j前一次出现的位置。那么当前的a[i原创 2015-04-27 20:47:29 · 518 阅读 · 0 评论 -
[期望dp+记忆化搜索] light oj 1038 Race to 1 Again
题意:给一个数n,每次随机选它的一个约数去除n,直到除到1为止,问除的次数的期望。思路:E[n]= E[n/a[1]]/cnt+E[n/a[2]]/cnt+...+E[n/a[n]]/cnt+1a[i]为n的约数,cnt为约数的个数。显然a[i]=1 则(1-1/cnt)E[n]=E[n/a[2]]/cnt+...+E[n/a[n]]/cnt+1记忆化搜索就ok了~代原创 2015-04-29 11:01:32 · 791 阅读 · 0 评论 -
[水+期望dp] light oj 1030 Discovering Gold
题意:给n个点,每个点都有一个财宝。你从1这个点开始出发,假设你在i这个点,每次随机走1~min(6,n-i)步。每到达一个点就拿走财宝。问最后拿到财宝的期望。思路:水的题目。dp[n]=v[n]然后逐个往前推。就是注意一下步数是 1~min(6,n-i)代码:#include"cstdlib"#include"cstdio"#include"cst原创 2015-04-29 09:34:50 · 904 阅读 · 0 评论 -
[水+dp] poj 3230 Travel
题意:给你n个城市m天。每个城市有到达的花费 c[i][j] 代表城市i到城市j的花费 本身到本身也有花费 就相当于住宿费吧。接着每天在每个城市都能赚钱 p[m][n] 代表每天每个城市赚的前。问m天后最多能赚多少钱。思路:比较水的dp吧。dp[i][j] 代表第i天在j城市 最多赚了多少钱。起点在1,所以dp[0][1]=0然后三重循环dp就好了·注意赚原创 2015-04-29 09:02:52 · 676 阅读 · 0 评论 -
[AC自动机+dp+矩阵快速幂] poj 2778 DNA Sequence
AC自动机+矩阵快速幂经典题,原创 2014-05-20 20:28:52 · 703 阅读 · 0 评论 -
[AC自动机+概率dp] hdu 3689 Infinite monkey theorem
题意:给n个字母,和m次数。然后输入n个字母出现的概率然后再给一个目标串str然后问m次中敲出目标串的概率是多少。思路:AC自动机+概率dp的简单题。首先建立trie图,然后就是状态转移了dp版本: dp三重循环变量次数,节点数,和字母数代码:#include"cstdlib"#include"cstdio"#include"cstring"#in原创 2014-10-14 13:53:50 · 965 阅读 · 0 评论 -
[概率dp] ZOJ 3822 Domination
题意:给N×M的棋盘,每天随机找一个没放过棋子的格子放一个棋子问使得每个每列都有棋子的天数期望思路:dp[i][j][k] 代表放了i个棋子占了j行k列 到达目标状态的期望然后从 dp[n*m][n][m] 往后递推就好了。因为知道了有i个棋子 例如一个状态dp[6][3][3]x x x o o ox o o o o ox o x o o oo o o o原创 2014-10-14 13:19:11 · 944 阅读 · 0 评论 -
[数位dp] hdu 3709 Balanced Number
题意:平衡数问题,就是找一个支点,两边位上的数成力矩和相等比如 4139 以3作为支点 左边=4*2+1*1 = 右边=9*1思路:一开始没想到,一点就恍然大悟。dp[site][n][sum] n为支点。然后只要枚举支点就好了。然后减去00,000,0000这些情况就ok了#include"cstdlib"#include"cstdio"#include"cst原创 2014-09-12 15:56:03 · 825 阅读 · 0 评论 -
[数位dp] hdu 4507 吉哥系列故事——恨7不成妻
题意:在一定区间内和7无关的数字的平方和。思路:这种醉醉的题目,也是醉醉的。其实理解了,就醒了~首先只求有多少个数,那么大家肯定都会了。但是这里我们对于dp[site][mod][sum] 要维护3个东西,n:有多少个数、sum:这些数的和、sumqrt这些数的平方和。我们通过递归,n就是我们大家都会的那个东西,那么对于这些数的和。举个例子,比如求12那就是0~12的和原创 2014-09-12 15:20:07 · 793 阅读 · 0 评论 -
[数位dp] cf 55D Beautiful numbers
题意:求[x,y]内,能被各个非零位整数的数的个数原创 2014-09-10 17:09:08 · 552 阅读 · 0 评论 -
[概率dp] hdu 5001 Walk
题意:n个点(1~n),m条边,走k次,双向边,每次随机走一条路,起点也随机,问不走到各个点的概率是多少。思路:概率dp[i][j][k] 前i步 走到j 走不到k的概率。那么状态转移就是 j能走到的点,传递所有dp[i][j][k]的值乘上概率。代码:#include"cstdlib"#include"cstdio"#include"cstring"#include"c原创 2014-09-22 23:59:35 · 611 阅读 · 0 评论 -
[数位dp] uestc 250 windy数
题意:不含前导零且相邻两个数字之差至少为2的正整数被称为windy数。思路: dp[i][j][k][f]原创 2014-09-10 11:15:58 · 630 阅读 · 0 评论 -
[数位dp] hdu 3652 B-number
题意:求含有13且能被13整除的数有多少个思路:dp[i][j][k] i原创 2014-09-10 11:06:24 · 577 阅读 · 0 评论 -
[数位dp] hdu 3943 K-th Nya Number
题意:输入P,Q,X,Y,代表在(P,Q]原创 2014-09-10 10:27:27 · 1008 阅读 · 0 评论 -
[数位dp] bzoj 3209 花神的数论题
题意:中文题。思路:和普通数位dp一样,这里转换成二进制,然后记录有几个一,统计的时候乘起来就好了。代码:#include"cstdlib"#include"cstdio"#include"cstring"#include"cmath"#include"stack"#include"algorithm"#include"iostream"using namespace原创 2014-09-19 16:54:02 · 1037 阅读 · 0 评论 -
[数位dp] spoj 10738 Ra-One Numbers
题意:给定x、y,为[x,y]之间有多少个数的偶数位和减去奇数位和等于一。个位是第一位。例子: 10=1-0=1 所以10是这样的数思路:数位dp[i][sum][ok] i位和为sum 是否含有前导0.然后就是因为有负数 所以根据范围把0设置为100 然后最后和等于101则为所求的数。代码:#include"cstdlib"#include"cstdio"#inclu原创 2014-09-19 16:15:03 · 1369 阅读 · 0 评论