![](https://img-blog.csdnimg.cn/20201014180756927.png?x-oss-process=image/resize,m_fixed,h_64,w_64)
动态规划
文章平均质量分 82
MoeO3
这个作者很懒,什么都没留下…
展开
-
【斜率优化dp】HDU3669 Cross the Wall
题目点这里 = =这道题折腾了我一下午 让我没能愉快地去写LCT 我最开始推出来的斜率 它居然是反的!!!还能愉快地玩耍吗???首先把墙壁有序化 按照哪个排序都可以。。比如我们按照h升序。。然后对于排完以后的序列 如果 i 所以我们要去掉这些可以放进去的。。让他们哪凉快哪呆着去。。然后剩下的序列就是h升序 w降序排列的了设dp[i][j] 为前i个人开j原创 2015-03-19 17:51:26 · 547 阅读 · 0 评论 -
【cdq分治】[Noi2007] bzoj1492 货币兑换Cash
题目点这里嗯。。倒腾了这么久终于折腾出来了。。对cdq有一点感觉了T_T当然。。还是很多不懂 = =在雅礼写cdq写不出来的感觉实在是。。。。首先这题有一个贪心 就是每天的买卖一定是100% 这样才能保证收益最大然后设x[i]表示第i天最多拥有A劵的数量 y[i]表示第i天最多拥有B劵的数量 f[i]表示第i天把劵全卖出去获得的最大金钱数那么 f[i原创 2015-04-04 15:30:54 · 755 阅读 · 0 评论 -
【区间dp】括号序列再战猪猪侠
ydc的题解是只需要两维状态 = =可是。。。可是我必须写三维才能AC TATall表示区间[L, R]是(A) 还是 AB。。为了O(1)判断处理一个二维数组的前缀和。。还有这个鬼要特判 u == v的情况#include #include #include using namespace std;int read(){ int n = 0, sign = 1原创 2015-04-10 18:27:53 · 751 阅读 · 0 评论 -
【计数】tower
看了题解完全觉得是sb题。。。那么 = =作为一个sb题都做不来的。。。设dp[i] 为前i 个的方案数,那么枚举所有能在上面放i 的积木j,就会对答案带来dp[i - 1]的贡献。#include #include #include using namespace std;int read(){ int n = 0, sign = 1; char c = ge原创 2015-04-10 18:36:56 · 527 阅读 · 0 评论 -
【动态规划】【双调TSP与MTSP问题】 hdu2224 & hdu4281
一个月前写的了。。。。首先双调TSP:hdu2224给出平面上的N个点(1~N) 从 1 号点出发走到最右端的点 N 再返回 1 要求中途不能重复走某个点而且必须把所有点全走一遍 求最小的总路径这个东西不是NPC 算导上有介绍O(N ^ 2)的算法。dp[ i ][ j ]来表示从 1 到 i 以及从 1 到 j 的最小总路径 (i 转移:①当 i ②原创 2015-04-08 18:26:20 · 1896 阅读 · 0 评论 -
【数位dp?】CodeForces 288E Polo the Penguin and Lucky Numbers
题目点这里那么好吧终于把这道题折腾完了以及我并不觉得这是dp = =题意:所有数位仅含4和7的数为lucky number 设[L, R]中第i大的lucky number为ai 求 a1*a2 + a2*a3 + a3*a4 +... an-1*anL和R的范围是10的10000次方 好吧 这数据范围就是数位dp的标准范围了 = =(不!其实一般的数位dp原创 2015-03-27 17:12:56 · 1697 阅读 · 0 评论 -
【树形dp】Codeforces 238C World Eater Brothers
题目点这里嗯。。。其实就直接dfs就可以了。。。就是先枚举一条边砍掉 = =然后呢先计算 u 和 v 的答案。。然后再dfs一遍修正答案。。。。。#include #include using namespace std;const int Nmax = 3e3 + 5;int N;struct ed{ int u, v, w, next原创 2015-04-16 22:33:03 · 868 阅读 · 0 评论 -
【数位dp】[Scoi2014] bzoj3598 方伯伯的商场之旅
题目点这里和方伯伯的斗争终于结束了。。。我也是快要死了。。。。(请自动忽视那两道非人哉的题 = =)之前听学长说这题很水的数位dp :)对 水到我都做不起了。 = =题解看了三遍啊!!!还是没研究明白这踏马是什么鬼!!……总有种我数位dp白学了的感觉(其实确实也是白学了) 思路……当然不是我想的…………思路请见省选rank3大神:http原创 2015-03-13 17:17:09 · 2510 阅读 · 0 评论 -
【动态规划】[NOIP2014] codevs3729飞扬的小鸟
去年这题炸了,然后一年过去了,我又写炸了人老了,写不动代码了……虽然复杂度是O(NM)没错,但是常数越写越大简直快要飞起来了 = =其实感觉可以开个辅助数组会降不少常数……题目点这里dp[i][j]表示到达(i, j)这个位置需要的最小点击次数三个转移:向上点击不到顶:step[i][j] = min(step[i][j], step[i - 1][j原创 2015-09-12 22:20:28 · 1149 阅读 · 0 评论 -
【数位dp】hdu4389 X mod f(x)
http://acm.hdu.edu.cn/showproblem.php?pid=4389简直有毒……#include #include #include using namespace std;int read(){ char c;int sign = 1, n = 0; c = getchar(); while(c > '9' || c < '0')原创 2016-07-25 22:36:06 · 669 阅读 · 0 评论 -
【区间dp】hdu5396 Expression
http://acm.hdu.edu.cn/showproblem.php?pid=5396现在有n个(≤100)数字和n-1个操作,操作只有”+ - *”三种,并且顺序是a1 op1 a2 op2 a3 ⋯ an。然后小明每一次随便选两个相邻的数和他们中间的符号,然后计算答案并且把那两个数擦掉换成新的数字。执行n-1次后会得到一个数字,现在请问对于所有可能的操作顺序最后得到的原创 2016-07-26 13:28:28 · 666 阅读 · 0 评论 -
【AC自动机】西征罗马之路
水题再没有爱了。。。#include #include #include using namespace std;int read(){ int n = 0, sign = 1; char c = getchar(); while(c '9') {if(c == '-') sign = -1; c = getchar(); } while(c >= '0'原创 2015-04-10 18:43:13 · 783 阅读 · 3 评论 -
【多重背包】二进制优化 && 单调队列优化 && w == v 的特殊情况的处理
为了弥补之前没有好好学的背包 = = 花了一下午来研究这个神奇的东西。。。当时觉得背包九讲好多东西根本看不懂啊各种跪啊其实现在看来也还好啊 = =唉。。当初真的太水了(PS:我依旧还是没觉得noip2014D1T3是个背包)其实其他的都没什么好说的。。01背包和完全背包就是枚举顺序问题 分组背包和依赖背包其实都可以看成是泛化物品 当然多重背包其实也是……不过多重背包因为原创 2015-04-02 18:20:10 · 887 阅读 · 0 评论 -
【整理】一堆好吃の数位dp
我觉得还是把数位dp和数学分开放比较好QuQ直到现在我也只会写记忆化orz。。。。【1】CodeForces 55D Beautiful numbers(数位DP+数学)题意:求一个正整数区间内能被自己的每一位整除的数的个数人生第一道数位dp 就被虐疯了……(好像也不是特别难?)首先设单位整数集为s = {0,1,2,3,4,5,6,7,8,9}原创 2015-03-17 09:42:32 · 499 阅读 · 0 评论 -
【整理】斜率or单调队列优化dp
【1】HDU2993 MAX Average Problem题意:求一个序列的子区间满足长度大于k且所有数平均值最大周源论文里的题。。之前有人说周源讲的是错的 其实应该是没什么问题的 可以O(n)求出不过这题hdu上的数据不知道怎么了 = = 反正我在网上找的ac代码们全都TLE。。。。总之……意思明白就好 反正也是入门题……#include #include原创 2015-03-18 21:16:37 · 501 阅读 · 0 评论 -
【线段树优化dp】zoj3349 Special Subsequence
题目点这里题意:在一个序列中寻找一个最长字序列使得每个相邻的数绝对值相差不差过d最开始以为是子数组 那这道题就水了 结果是子序列 然后就orz了dp[i] 表示包含前i个数的子序列中 最长的符合要求的子序列的长度 dp[i] = max(dp[j] + 1) ( j 用权值线段树维护dp的最大值 每次查询区间 a[i] - d 到 a[i] + d 的最大值由于原创 2015-03-06 14:42:31 · 569 阅读 · 0 评论 -
【概率dp】zoj3329 One Person Game
题目点这里设dp[i]为当前的总点数为i剩余次数的期望 p[i]表示一次掷骰子总点数为i的概率 p[0]表示三枚骰子点数分别为a b c的概率则dp[i] = sigma(dp[i + k] * p[k]) + dp[0] * p[0] + 1 ①设dp[i] = A[i] * dp[0] + B[i]原创 2015-03-06 08:27:50 · 536 阅读 · 0 评论 -
【总结】三道神一样のdp
拿到题我觉得是两道数论加一道网络流。结果是三道dp!!orz dp真的好渣啊 感觉快要没救了 呜呜呜尧神对不起啊真的是考得不好心情很差一大堆负能量_(:з)∠)_1、稳住GCD【题目描述】给你一组数,a1,a2,a3,...,an。令:G=gcd(a1,a2,a3,...,an)现在从中任意删除一些数字,设剩下的数为:al1,al2,al3,...,alm。原创 2015-03-09 16:59:12 · 975 阅读 · 0 评论 -
【扩展KMP】【树状数组优化dp】字符串游戏
tsy:衣服串你会啥? me:会乱搞!这题。。我记得当时写了个。。。搜索。。。各种MLE掉了………… = =正解呢 是扩展KMP+树状数组优化dp。。先来说扩展KMP怎么写。。。这道题只用对自己跑扩展KMP 所以就只用写一个函数就行了inline void e_kmp(){ int j = 0, last = 1; for(; j < len && s原创 2015-03-21 09:55:56 · 728 阅读 · 0 评论 -
【树形dp】UVALive 2038 Strategic game
题目点这里水水水水水の入门题 = =。。只是为了弥补我一年多以来树形dp从来没有ac过的遗憾!!!(呵呵!!)顺带吐槽一下lrj的题面再次翻译错了2333333这个代码真的是我写的。。。 = =不要问我代码风格是怎么回事。。。。。。是xcode的神代码补全干的。。。。#include #include #include using namespac原创 2015-03-29 21:42:21 · 622 阅读 · 0 评论 -
【二维树状数组优化dp】[Scoi2014] bzoj3594方伯伯的玉米田
终于方伯伯系列就只差逛商场了(两天的压轴题是人能做的?)这道题记得当时我去省选的时候还把n^2的算法写出来了的……现在想想真不容易 = =状态很好定义 dp[i][j] 表示已经处理完i根玉米 拔高了j次 剩下的玉米的最大值我去省选的时候想的转移是这样的(其实我不确定)dp[i][j] = max(dp[i-1][j], dp[k][j-1]) (a[k] - a[i] =原创 2015-03-13 08:05:52 · 1994 阅读 · 0 评论 -
【总结】齐朋辉の四道题
本来说昨天吧四道题切完的……结果尧神来了。。窝就不淡定了。。。。 = =各种写不出(其实还是我太弱。。)T1 方老师字符串【题面描述】方老师喜欢一种字符串,包含以下两个条件:包含且仅包含N个0和M个1通过压缩变换之后可以得到G压缩变换这样定义:如果这个字符串长度大于等于2,那么如果最后两个字符是两个0,将这两个0替换为1 eg. 01原创 2015-03-03 19:59:27 · 964 阅读 · 0 评论 -
【单调队列优化dp】Uvalive4327丨Poj3926 Parade
uvalive戳这里 poj戳这里单调队列优化的dp……挺显然的…………70行代码。。写了得快崩溃。。。debug更是要。。。跪。。。了。。。。没力气写思路了…………反正和trade那道题也差不多dp[i][j] = max{dp[i-1][j], dp[i-1][k] + sum[k] - sum[j] / sum[j] - sum[k]} 然后两个单调队列就行原创 2015-03-30 22:22:19 · 755 阅读 · 0 评论 -
【01背包】Uvalive4015 Caves && Uvalive3637 The Bookcase
我要相信LA已经挂掉了不管是我的代码还是网上的AC代码交上去全是WA WA WA!!!so。。我也不知道我写的到底能不能过。。。以后找时间交吧。。QAQ两道01背包。。当时学背包就没好好学T_T于是…………Uvalive4015 Caves题意:(不吐槽lrj那个语死早的翻译了)就是一个人要在树上走。。他可以在树上随意走动 然后有一些原创 2015-04-01 18:36:42 · 796 阅读 · 0 评论 -
【动态规划】Sicily1280 Permutation
http://soj.sysu.edu.cn/show_problem.php?pid=1280dp[i][j]表示已经填了i个数,剩余有j个数比填好的第i个数小。转移:dp[i + 1][k] += dp[i][j];a[i] > a[i + 1] k: 0 to j - 1 a[i] 起始状态:dp[1][i] = 1 (i : 0 to原创 2016-11-15 13:19:17 · 1135 阅读 · 0 评论