DP
文章平均质量分 58
KirinSB
这个作者很懒,什么都没留下…
展开
-
HDU 6148 Valley Numer (数位DP)题解
思路:只要把status那里写清楚就没什么难度T^T,当然还要考虑前导零!代码:#include<cstdio>#include<cstring>#include<iostream>#include<algorithm>#define ll long longusing namespace std;const int N = 100000...原创 2018-07-08 15:12:02 · 158 阅读 · 0 评论 -
HDU 2089 不要62 (数位DP)题解
思路:详解#include<iostream>#include<algorithm>#include<cstring>#include<queue>#include<map>#define ll long longusing namespace std;const int N = 1000000+5;int dp[10][...原创 2018-07-07 14:44:07 · 112 阅读 · 0 评论 -
HDU 4734 (数位DP)题解
思路:dp[pos][pre]代表长度为pos的不大于pre的个数#include<iostream>#include<cstdio>#include<cstring>#include<string>#include<queue>#include<set>#include<vector>#includ原创 2018-07-07 18:30:32 · 189 阅读 · 0 评论 -
HDU3652 B-number(数位DP)题解
思路:这里的状态分为3种,无13和末尾的1,无13且末尾为1,有13,然后DFS等我搞清楚数位DP就来更新Orz代码:#include<iostream>#include<cstdio>#include<cstring>#include<string>#include<queue>#include<set>#inc...原创 2018-07-07 22:03:14 · 197 阅读 · 0 评论 -
HDU 3709 Balanced Number(数位DP)题解
思路:之前想直接开左右两边的数结果爆内存...枚举每次pivot的位置,然后数位DP,如果sum<0返回0,因为已经小于零说明已经到了pivot右边,继续dfs只会越来越小,且dp数组会炸注意一下一些细节:dp开long long,注意前导零只能算一次代码:#include<iostream>#include<algorithm>#define ll long l...原创 2018-07-14 16:27:37 · 157 阅读 · 0 评论 -
CodeForces - 55D Beautiful numbers(数位DP+Hash)题解
题意:美丽数定义:一个正数能被所有位数整除。求给出一个范围,回答这个范围内的美丽数。思路:一个数能被所有位数整除,换句话说就是一个数能整除所有位数的LCM,所以问题就转化为一个数能否被所有位数的LCM整除。按照一般的思想,直接开三维dp[pos][num][lcm]。但是num范围很大,直接开就爆了,怎么办呢?我们可以把num%2520(即1~9的LCM)储存为mod,因为所有位数最大的LCM就是...原创 2018-07-14 22:49:14 · 110 阅读 · 0 评论 -
SPOJ BALNUM Balanced Numbers(数位DP+状态压缩)题解
思路:把0~9的状态用3进制表示,数据量3^10代码:#include<cstdio>#include<map>#include<set>#include<queue>#include<cstring>#include<string>#include<cmath>#include<cst原创 2018-07-16 09:52:57 · 160 阅读 · 0 评论 -
HDU 6156 Palindrome Function(数位DP)题解
思路:数位dp的操作是dfs+记忆化,我们dp开四维:位置,长度,进制,是否回文。然后每次暴搜记录下每个位置的数字是什么,搜到对称轴另一边需要检查是否符合回文。终于把友谊赛的题目都补完了...没做出来的都是学过的,做出来的都是没学过骚操作过的...学以不致用...代码:#include<cstdio>#include<set>#include<s...原创 2018-07-31 10:35:31 · 143 阅读 · 0 评论 -
HDU 2457 DNA repair(AC自动机+DP)题解
题意:给你几个模式串,问你主串最少改几个字符能够使主串不包含模式串思路:从昨天中午开始研究,研究到现在终于看懂了。既然是多模匹配,我们是要用到AC自动机的。我们把主串放到AC自动机上跑,并保证不出现模式串,这里对AC自动机的创建有所改动,我们需要修改不存在但是符合要求的节点,如果某节点的某一子节点不存在,我们就把这个子节点指向他父辈节点存在的该节点(比如k->next[1]不存在,k-&...原创 2018-07-28 10:00:53 · 273 阅读 · 0 评论 -
POJ 2373 Dividing the Path (单调队列优化DP)题解
思路:设dp[i]为覆盖i所用的最小数量,那么dp[i] = min(dp[k] + 1),其中i - 2b <= k <= i -2a,所以可以手动开一个单调递增的队列,队首元素就是k。初始状态为dp[0] = 0,注意喷水覆盖的范围是偶数且不重叠,所以插入队列的必是偶数。有牛的地方不能作为边界,所以这些地方都要排除,可以用vis标记或者其他方法。代码:#include<map...原创 2018-07-12 10:26:27 · 303 阅读 · 0 评论 -
POJ 2923 Relocation(状压DP+01背包)题解
题意:给你汽车容积c1,c2,再给你n个包裹的体积,问你最少运几次能全运走思路:用2进制表示每次运送时某物在不在此次运送之中,1在0不在。我们把运送次数抽象成物品价值,把状态抽象成体积,用一个dp[ i ] 记录完成状态i的最少步数那么就转化为了01背包问题,得到状态转移方程dp[ j|state ] = min( dp[ j|state ],dp[j] + 1 ),state为运送时物品的状...原创 2018-07-17 15:27:13 · 134 阅读 · 0 评论 -
HDU1143 (递推)题解
Tri TilingTime Limit: 2000/1000 MS (Java/Others) Memory Limit: 65536/32768 K (Java/Others)Total Submission(s): 4343 Accepted Submission(s): 2518Problem DescriptionIn how many ways can you tile a...原创 2018-03-02 16:22:42 · 462 阅读 · 2 评论 -
HDU 2571(dp)题解
命运Time Limit: 2000/1000 MS (Java/Others) Memory Limit: 32768/32768 K (Java/Others)Total Submission(s): 21193 Accepted Submission(s): 7382Problem Description穿过幽谷意味着离大魔王lemon已经无限接近了!可谁能想到,yifenfei...原创 2018-03-02 13:15:20 · 146 阅读 · 0 评论 -
UVA 3942 Remember the Word (Trie+DP)题解
思路:大白里Trie的例题,开篇就是一句很容易推出....orz这里需要Trie+DP解决。仔细想想我们可以得到dp[i]=sum(dp[i+len[x]])。这里需要解释一下:dp是从最后一个字母往前dp,dp[i]代表从i这个字符开始到最后一个字符的这个字符串(就是s[i,i+1,...,L])所能拆分的个数,所以我们每次查询s[i,i+1,...,k]是否存在这个前缀,都的话就加上dp[k+...原创 2018-05-15 13:09:40 · 135 阅读 · 0 评论 -
POJ 1260 Pearls (斜率DP)题解
思路:直接DP也能做,这里用斜率DP。dp[i] = min{ dp[j] + ( sum[i] - sum[j] + 10 )*pr[i]} ;k<j<i => dp[j] - dp[k] <pr[i]*( sum[j] - sum[k] )再套模板#include<queue>#include<cstring>#include<se...原创 2018-07-05 11:21:55 · 152 阅读 · 0 评论 -
HDU 1438 钥匙计数之一(状压DP)题解
思路:每个槽有4种深度,一共有2^4种状态。然后开4维来保存每一次的状态:dp[ 第几个槽 ][ 当前状态 ][ 末尾深度 ][ 是否符合要求 ]。代码:#include<cstdio>#include<map>#include<set>#include<queue>#include<cstring>#include<st...原创 2018-07-16 11:59:59 · 182 阅读 · 0 评论 -
POJ - 3254 Corn Fields(状压DP)题解
思路:参照blog,用状压DP做,和题解稍微有点不一样,我这里直接储存了状态而不是索引。这一题的问题是怎么判断相邻不能种,我们用2进制来表示每一行的种植情况。我们将每一行所能够造的所有可能都打表(即认为每一块都能种),然后将每一行不能种的地方用2进制保存下来,两者&运算聚能知道是否有重合,重合即此方法排除;上下两行同理;判断左右两块则是左移后&运算。状态DP做的时候想着...原创 2018-07-16 16:48:33 · 191 阅读 · 0 评论 -
POJ 1185 炮兵阵地(状压DP)题解
思路:和上一篇思路一样,但是这里要求最大能排几个,这里要开三维,记录上次和上上次的状态,再一一判定,状态转移方程为 dp[i][j][k] = max(dp[i][j][k],dp[i - 1][k][t] + num[j])代码:#include<cstdio>#include<map>#include<set>#include<queu...原创 2018-07-16 19:27:34 · 246 阅读 · 0 评论 -
HDU 4272 LianLianKan (状压DP+DFS)题解
思路:用状压DP+DFS遍历查找是否可行。假设一个数为x,那么他最远可以消去的点为x+9,因为x+1~x+4都能被他前面的点消去,所以我们将2进制的范围设为2^10,用0表示已经消去,1表示没有消去。dp[i][j]表示栈顶是i当前状态为j时能不能消去栈顶,-1代表不知道,0不行,1行。所以我们只需DFS到i==n时j是否为0,就可以知道能不能消除。更新状态时,只有栈顶到栈底元素>10才...原创 2018-07-17 09:54:14 · 205 阅读 · 0 评论 -
POJ 1625 Censored!(AC自动机->指针版+DP+大数)题解
题目:给你n个字母,p个模式串,要你写一个长度为m的串,要求这个串不能包含模式串,问你这样的串最多能写几个思路:dp+AC自动机应该能看出来,万万没想到这题还要加大数...orz状态转移方程dp[i + 1][j->next] += dp[i][j],其他思路和上一题hdu2457一样的,就是在AC自动机里跑就行了,不要遇到模式串结尾,然后最后把所有结尾求和就是答案。注意下题目说...原创 2018-07-28 12:03:01 · 164 阅读 · 0 评论