dp
文章平均质量分 69
「已注销」
混子一个
展开
-
树形DP—依赖背包模板
void DP(int x){ for(int i=0;i<=t;i++){ dp[x][i]=p[x].val; } for(int i=0;i<son[x].size();i++){ if(in[son[x][i]]==1) continue; DP(son[x][i]); int原创 2016-03-12 12:25:14 · 843 阅读 · 0 评论 -
hdu 6143 组合数学+dp
题意: m个字母,组成两个长度为n的字符,其中一个字母不能同时出现在两个串中。问总方案?思路:枚举m个中恰好有i个在第一个串,有j个在第二个串。。然后求个和。。具体其中n个空恰好k种颜色,可以用dp预处理。dp[j][i]=((dp[j-1][i]*i)%mod+(dp[j-1][i-1]*i)%mod)%mod;代码:#includeusing namesp原创 2017-08-17 19:28:46 · 425 阅读 · 0 评论 -
hdu 6148 数位dp
题意:中文题,求小于等于n的"山谷"数的个数思路:数位dp,注意此题中状态转移与前导0有关即可。代码:#includeusing namespace std;#define MEM(a,b) memset(a,b,sizeof(a))#define bug puts("bug");#define PB push_back#define MP make_pair#define原创 2017-08-18 21:17:28 · 209 阅读 · 0 评论 -
hdu 6125 分组背包+状态压缩
题意:1---n 选择不超过k个数,使得他们的乘积不包含完全平方因子。思路:考虑有相同因子的数不能同时选择,自然想到了分组,并且要加上一个维度K(来限制当前选了几个数字),但事实上一个数又可以属于很多组。。。这里就可以使用状态压缩来压缩因子,{2,3,5,7,11,13,17,19},除去这些因子之后,就可以分组啦。当然这些因子本身也是需要判断互不相交的,我们可以枚举状态i j原创 2017-08-15 20:52:11 · 849 阅读 · 0 评论 -
hdu 6170 正则表达式
题意:给你一个正则表达式(伪),唯一不同其中.*代表 不是 *个. 而是.先匹配再星思路:场上dp过了(瞎分类讨论不知道wa了多少次。。),试图用正则来着但是不会写。。。下来学习一下姿势。。首先regex这个c++11的库函数就不多说了,知道怎么构造正则和匹配就可以了。重要的还是正则姿势。实际上正解的就是把 .* 换成(.)\1*,匹配num,其中n原创 2017-08-22 21:28:13 · 349 阅读 · 0 评论 -
hdu 6201 树分治
题意:一棵树,边全,点权,点权是书的价格,边权是运费。任选两个点买卖,求最大 利益。思路:nlogn树分治,当时一看1e5,又是求树上路径的,想也没想直接莽分治,分治的过程中维护最大作为买和卖的利益就好了。代码:#includeusing namespace std;#define X first#define Y second#define PB push_back#def原创 2017-09-13 18:24:24 · 427 阅读 · 0 评论 -
hdu 6156 回文数 数位dp
题意:k进制下的回文个数。。其实就是普通的。。稍加修改思路:老题,直接枚举L进制--R进制代码:#includeusing namespace std;#define MEM(a,b) memset(a,b,sizeof(a))#define bug puts("bug");#define PB push_back#define MP make_pair#define X原创 2017-09-07 15:47:44 · 366 阅读 · 0 评论 -
2017沈阳网络赛G XOR 分块(分类讨论sqrt)
题意:一棵树,点权,Q次询问,A---B路径上每K个点的异或和链接:点击打开链接思路:分类讨论,k小于200,类似dp的预处理,在求lca的过程中可以求出来,k大于200,直接暴力跳,最多跳sqrtn步,其中还带个log的倍增。1200ms AC。。PS :场上手残。。。代码:#includeusing namespace std;const int MAXN = 100原创 2017-09-16 20:11:04 · 248 阅读 · 0 评论 -
hdu 6212 区间dp
题意:祖玛游戏,最少的弹药消除所有珠子思路:区间dp,注意枚举中间空一个珠子的情况,这里要注意的是中间不能有两个,并且两边的加中间枚举的也不能是三个(因为这样不管先取左右都会直接被消除掉)代码:#includeusing namespace std;struct node { int num, color;}ball[515];int f[515][515];int a[5原创 2017-09-19 19:05:07 · 331 阅读 · 0 评论 -
hdu 6199 dp
题意:巨毒。。实际上就是A,B都希望自己得到的最多。前一个人拿k个,下一个人能拿k or k+1思路:倒着DP。。实际上两个人是同一种策略,那么其实一个dp数组就可以了。。从最后一步拿k个往回推,dp[i][j]表示取第i个时候拿走包含i的j个,转移方程dp[i][j]=sum[i+j-1]-sum[i-1]-max(dp[i+j][j],dp[i+j][j+1]) (PS,注意一下边界的合法原创 2017-09-20 00:13:02 · 375 阅读 · 0 评论 -
CF895C dp/线性基
链接:点击打开链接题意:n个数,选子集乘积之和是完全平方数的子集个数思路:首先题目中ai非常小,显然可以状态压缩因子把问题转化成异或和为0的方案数字。在此基础上可以DP解决或者使用线性基DP方法用dp[i][j]表示i次插入时异或和为j的方案数,我们可以想到插入一个新数字就是 dp[i-1][j ^ st]+=dp[i-1][j]但是到此每插入一个数都要遍历j (2^1原创 2017-12-07 01:18:55 · 377 阅读 · 0 评论 -
AC自动机+DP codeforces86C
没积分了。。更新一下。。http://codeforces.com/contest/86/problem/CAC自动机加DP经典题目,题意:。。。思路:构建AC自动机,在AC自动机上跑,这样通过构造可以保证满足条件。再次基础上DP计数,DP[ len ][ idx ][ fail ] len 表示 已经走了几步,idx表示在自动机上第几个节点,fail表示已经...原创 2018-09-17 17:02:47 · 231 阅读 · 0 评论 -
hdu 6140 bitset+背包
题意:。。。题意有点毒啊 。。。"For those who do not have the patience to read the problem statements"。。。但是事实上上面那个式子是有用的。。。n个数,每个数有属性,分别对应可以选择正负或都可以。然后让你选一个集合,sum==k思路:加上题意的限制。。。其实每次能组成的数都是连续的。我们只要维护最左端和右端就可原创 2017-08-17 18:29:42 · 438 阅读 · 0 评论 -
CF 835D D. Palindromic characteristics 字符串hash
题意。 定义k回文,一个是k回文的串那么他本身是回文,并且左右相等,并且左右是k-1回文问:一个S,所以字串分别是x回文?输出1----n回文的数目思路:直接暴力记忆化搜索!枚举判断就好了,回文和相等的条件都用hash判断就好了,注意下标问题!!!!尤其是回文时候的下标问题!!!代码:#includeusing namespace std;#define MEM原创 2017-08-01 02:01:18 · 432 阅读 · 0 评论 -
51nod 1791 合法括号子段 DP
思路: DP[i] 表示以i结尾的方案数,模拟一遍括号匹配过程就好了代码:#includeusing namespace std;#define MEM(a,b) memset(a,b,sizeof(a))#define PB push_back#define MP make_pair#define X first#define Y second#define bug原创 2017-07-31 19:51:59 · 221 阅读 · 0 评论 -
HDU 1074—压缩DP
第一次写博客,感觉第一次理解dp一些,HDU 1074,题意是安排做作业顺序,这里的压缩状态,0不做,1做了,然后搜索下一状态,类似广度搜索,然和比较可以到这一状态的最优解,这里类似记忆化搜索一样保存所有搜过的状态,(可能dp就是一种特殊的记忆化搜索?)下面见代码#include #include #include #include #include #inclu原创 2015-12-08 17:43:48 · 413 阅读 · 1 评论 -
WOJ 1608 状压dp
这周打了whu校赛的网络赛,感觉自己菜的不得了。。。和队友两个小时做了5个题之后就开始挂机三小时。。惨不忍睹简直,当时这题完全没有思路。yy了一个dp复杂的也不会算各种写不出来。。赛后看巨巨的代码学会了枚举子集(之前弱到枚举子集都不会写还以为要dfs)。。然后写了一个记忆化400ms水过了,还是没有跑到300ms以内,不是的搞成递推会不会快一些,自己要加强的地方实在太多了,慢慢来吧,今后继续努原创 2016-04-10 21:33:03 · 330 阅读 · 0 评论 -
HDU 5691 状压dp
http://acm.hdu.edu.cn/showproblem.php?pid=5691 题目;题意是给你一堆数。。有的有限制在第几个有的不限制在第几个。。问如何排列相邻的乘积相加最后最大。。坑爹初始化错了wa了好长时间。。放下一段时间回来看发现初始化错了。。这里考虑状压dp,dp[ i ] [ j ] 表示 i 状态下 最后一个乘的是 j 的时候的最大值。。。原创 2016-05-25 17:10:04 · 233 阅读 · 0 评论 -
51NOD 1296-dp
http://www.51nod.com/onlineJudge/questionCode.html#!problemId=1296题意就是一个 1--n 的序列,然后给你一些数,要再这些位置比旁边大,另一些数,这些位置要比旁边的小。。题意就是这样,之前做的题拿出来复习。。dp思路是 dp[i][j] 表示 前i个数最后一位是j是什么的时候有多少可行方案(是不是有点像原创 2016-05-09 11:10:52 · 698 阅读 · 0 评论 -
HDU 4734--基础数位dp(递推)
以前成都赛区的题目。。http://acm.hdu.edu.cn/showproblem.php?pid=4734题意很明显,就是有一个F(x)的函数,然后给你一个a和b求出在0~b中有多少小于等于F(a)的,预处理出来dp[i][j][k]中有多少小于等于k的。。这里采用递推。。因为我太弱了。递归总是写错。。还需慢慢加深理解。。PS.代码很丑。。还是推荐递归。。实在不会递推也原创 2016-05-19 17:26:02 · 287 阅读 · 0 评论 -
HDU 5724 博弈,SG函数
http://acm.hdu.edu.cn/showproblem.php?pid=5724题意:20列n行的一个棋盘,起始上面有一些棋子,每次玩家可以移动向右,如果右边有连续x个就跳过。。问玩家一输赢情况。。思路:发现和SG函数那个图的模型很像,所以联想到SG函数可以。。(玄学。。我并不懂博弈)。。那么我们就可以按照SG函数的定义,用mex那个操作来记忆化搜索一下,过程基原创 2016-07-24 18:33:24 · 368 阅读 · 0 评论 -
Codeforces Round #355D (Div. 2) 暴力+BFS
题目链接:http://www.codeforces.com/contest/677/problem/D题意:你一开始在(1,1),有n*m个地方,去X以前必须要去X-1思路:这题很迷。。我确实是不会做。。看来BFS分类的思路实现了一下过了,这题直接暴力是n^4肯定是不行的,当然显然直接BFS也不行,就算有剪枝最坏情况仍然很糟糕(当出发点很多的时候剪枝效果显然会变好),所以考虑以n原创 2016-06-22 20:33:21 · 327 阅读 · 0 评论 -
Codeforces Round #358 (Div. 2) DP
http://www.codeforces.com/problemset/problem/682/D题意:最长公子序列,限制是最多分成k段,也就是你得到的最长公子序列不能实在原串中分成K段以上。思路:一个DP。。想了很久。。果然DP始终没法入门。。我们设状态是DP[ i ] [ j ] [ k ] [ s ] 表示匹配到第i,j时分成k段,此时是连续或不连续时的最长LC原创 2016-07-31 18:31:58 · 191 阅读 · 0 评论 -
HDU 5794 容斥原理+Lucas
http://acm.hdu.edu.cn/showproblem.php?pid=5794题意: 马在(1,1)走到(n,m)有些地方设置了障碍物不能走。。问方案总数是多少?思路:题外话考虑如果不是马是兵。。其实就是一道CF的原题。。。是马的话其实和兵的思路是一样的,唯一稍微有困难的是要求出(1,1)到(x,y)的方案数 结论是 Lucas ( (x+y)/原创 2016-08-06 16:07:55 · 406 阅读 · 0 评论 -
HDU 5898 基础数位DP
http://acm.hdu.edu.cn/showproblem.php?pid=5898题意:统计 连续的奇数必须是偶数个,连续的偶数必须是奇数个。。的个数思路:dp[ i ] [ j ] [ k ] 前i位 上一位是j 连续的奇数或者偶数有k。。blog里面数位dp比较少,贴一个上来。。。代码:#include #include原创 2016-09-21 16:42:54 · 841 阅读 · 0 评论 -
Educational Codeforces Round 17 D dp
题目链接:http://codeforces.com/contest/762/problem/D题意:n*3的方格,从左上走到右下,一个格子不能走两遍,每个格子有个权值,最后将路径所有权值加起来问最大是多少?思路:瞎dp分类讨论一下,竖着三个三个去刷dp的表,直接分类讨论可能由哪些转移过来就好。备注:假期摸鱼。。代码:#include#define bug(x) cout<<原创 2017-01-30 12:10:39 · 251 阅读 · 0 评论 -
hdu 4507 数位DP(求和类型)
中文题,题意略,老年人康复练习数位DP,和一般的不同,这种数位dp统计数字和或者数字平方和注意取模!!!代码:#include using namespace std;typedef long long ll;int a[20];const ll mod=1e9+7;ll po[20];struct D{ ll cnt,sum,sum2;原创 2017-07-21 13:35:06 · 252 阅读 · 0 评论