
奇怪dp
largecub233
这个作者很懒,什么都没留下…
展开
-
洛谷P3147 [USACO16OPEN]262144
https://daniu.luogu.org/problem/show?pid=3147 很有意思的题目啦; 虽然想想好像也是很显然的; 就是一个和倍增很像的dp 这道题其实十分有趣。 f[i][j]表示从j开始合并到i这个数字序列的末尾的下表是什么。 那么因为合并的总是一段连续的区间,就有f[i][j]=f[i-1][f[i-1][j]];#include<bits/st原创 2017-08-17 15:32:20 · 551 阅读 · 0 评论 -
dp——洛谷P1240 诸侯安置
https://www.luogu.org/problem/show?pid=1240 哇很好的一道题目诶; 和那个八皇后很像的,但是八皇后是一年前做的题了; 这个我们搜索就算了,虽然用一些技巧也不是说过不去; 我们dp吧; 但是这个图像我们显然是不可以dp的; 那我们转化一下; 图是从某大佬博客上盗来的……. http://blog.sina.com.cn/s/blog_3ba原创 2017-05-31 15:59:47 · 551 阅读 · 0 评论 -
dp——洛谷 P1412 经营与开发
https://www.luogu.org/problem/show?pid=1412 这题是在胡老师哪里做的; 话说蛮怀念在初中的那段日子; 当年好像还不知道csgo 直接大力dp,只要从后往前就好了vara,b:Array[1..100001]of longint;f:array[1..100001] of real;n,w,k,c,i,j:longint;function ma原创 2017-06-20 09:04:44 · 348 阅读 · 0 评论 -
dp——洛谷 P1435 回文字串
https://www.luogu.org/problem/show?pid=1435#sub 因为这是求回文字串,先把给的序列,倒过来存到另一个数组里,就成了求两个数组的最长公共子序列,在用所给的字串减去最长公共子序列的长度就是要添加的长度;#include<bits/stdc++.h>#define Ll long longusing namespace std;const int原创 2017-06-20 16:06:37 · 401 阅读 · 0 评论 -
dp——洛谷 P1472 奶牛家谱 Cow Pedigrees
https://www.luogu.org/problem/show?pid=1472#sub 这里有一个很牛逼的dp(orz Fop_zz) 就是通过合并两颗比较小的子树来形成一颗大树; f[i][j]表示深度为i的点有j个节点的方案; 那么一颗子树的deep显然是i-1,另一个枚举; 一颗子树的节点数p枚举,那么另外的节点数就是j-1-p; 这样的话时间复杂度(100^4)刚好一个亿原创 2017-06-22 11:28:22 · 398 阅读 · 0 评论 -
dp——洛谷 P1523 旅行商简化版
https://www.luogu.org/problem/show?pid=1523 旅行商问题也建议大家取了解一下,有很多变题; 首先是一个dp 【1】题意:旅行商问题,不过要求只能单向走,就是有n个地方,要求从西往东,到最东面的地方,在从东往西返回,经过每个点一次,求最短路径 【2】分析:由于有了方向的限制,这题不再是NP难题,我们可以假设有两个人一起从西往东走,走过的点不能重复原创 2017-06-24 08:54:27 · 690 阅读 · 0 评论 -
单调栈——洛谷 P1565 牛宫
https://www.luogu.org/problem/show?pid=1565 单调栈总是和二分一起用; 我们可以枚举一个矩形的宽; 这个是n^2的时间; 那么我们如果可以求出这个宽对应的长的最大值那就好了; 我们何以通过把前缀和放到单调栈里面去二分就可以n*logn啦;这次压行有点过分,不要在意….、#include<bits/stdc++.h>#define Ll long原创 2017-06-27 11:42:33 · 907 阅读 · 0 评论 -
洛谷P3193 [HNOI2008]GT考试
https://www.luogu.org/problem/show?pid=3193 一开始感觉这道题目很难啊什么的; 然后身边的同学们慢慢都ac了; 才发现这道题并不是怎么的难; 我们搞一个f[i][j]表示现在已经有i个数字了,而且最后j个数字是不幸数字的一部分; 注意对于同一个状态j要竟可能大; 比如 1212是不幸数字 那么551212是f[6][4]; 这样的话我们可以原创 2017-07-04 14:40:59 · 1340 阅读 · 1 评论 -
洛谷P1941 飞扬的小鸟
https://daniu.luogu.org/problem/show?pid=1941 思路很简单的一个dp; 但是细节是很多的; 我们设f[i][j]表示到第i列j行; 那么 f[i][j]=min(f[i-1][j+Y[i]] , f[i-1][j-X[i]*k]+K) 然后我们想办法吧k给压掉; 类似于完全背包的方法我们吧k给压掉; 就是通过从f[i][j原创 2017-07-06 15:32:29 · 458 阅读 · 0 评论 -
vijos1264 神秘的咒语
https://vijos.org/p/1264 感觉很有趣的dp; 首先你要想到一个dp方程; f[i][j]表示a[]里面到第i个,b[]里面强制取第j个; 然后我们需要先枚举i; 通过j来做一个最长上升子序列; 一次性更新所有f[i][x]的答案;#include<bits/stdc++.h>#define Ll long longusing namespace std;co原创 2017-07-07 10:29:40 · 470 阅读 · 0 评论 -
洛谷 P1633 二进制
我去考fop_zz的; 结果他真的秒掉了; https://www.luogu.org/problem/show?pid=1633 我们考虑三个长度为l的串; 显然如果这3个串符合条件的话; 我们就只要保证增加2^l级别的值满足加法原则就好了; 所以我们大力dp; f[i][a][b][c][0/1] i表示位数 a表示x串前i-1个字符所有的1的数量; b,c同理; 0/原创 2017-07-10 08:15:32 · 628 阅读 · 0 评论 -
洛谷 P1666 前缀单词
https://www.luogu.org/problem/show?pid=1666 首先空集合也是答案,所以样例是对的; 那么我们思考; 假如两个串ab; a#include<bits/stdc++.h>#define Ll long longusing namespace std;const Ll N=55;string s[N];Ll f[N][N];Ll n,ans;原创 2017-07-10 20:08:48 · 391 阅读 · 0 评论 -
单调队列dp——vijos1617 超级教主
https://vijos.org/p/1617 如果a[i]表示前缀和; 那么 f[i]的更新式 f[j]-i*100+a[i]-a[j] 然后和j有关的只有 f[j]-a[j] 那么直接那单调队列走起; orz Fop_zz#include<bits/stdc++.h>using namespace std;const int N=2e6+5;int a[N],f[N],q原创 2017-05-26 15:45:05 · 533 阅读 · 0 评论 -
dp——vijos1322 解题
https://vijos.org/p/1322 n^3的做法; orz Fop_zz; f[i][j] 代表现在做到了j个题目; 最近做了i~j的题目,的最少月数; 这个怎么维护 我们要枚举一个k k=0~i-1 然后用f[k][i-1]取更新f[i][j] 分两类讨论; 1.f[k][i-1]这天仅仅还债 2.f[k][i-1]这天不仅还债还要再请人;对了,为什么不可以贪原创 2017-05-26 10:11:27 · 319 阅读 · 0 评论 -
动规-洛谷P1415 拆分数列
https://www.luogu.org/problem/show?pid=1415#sub 哇,字符串dp 原文 http://www.cnblogs.com/candy99/p/6070534.html 第一步,d[i]表示以i结尾的序列最后一个数最小的起始下标d[i],转移同上 第二步,f[i]表示从i开始的序列第一个数最大的终止下标f[i],转移f[i]=max{j|T(i转载 2017-03-13 10:52:58 · 348 阅读 · 0 评论 -
dp-vijos1235天堂的馈赠
https://vijos.org/p/1235 场面一度十分尴尬; Fop_zz5分钟AC的水题我调了十多分钟#include<iostream>#include<cstdio>#include<cstring>#include<algorithm>#include<cstdlib>#include<cmath>#include<map>#define Ll long long原创 2017-03-27 11:07:26 · 392 阅读 · 0 评论 -
dp——P2134 百日旅行
https://www.luogu.org/problem/show?pid=2134 这个题目显然有一个N^2的做法#include<cstdio>#include<cstring>#include<iostream>using namespace std;int f[200005],ff[200005];int n,m,p,q;int main(){ scanf("%d%原创 2017-04-20 08:44:40 · 380 阅读 · 0 评论 -
dp——洛谷P2679子串
https://daniu.luogu.org/problem/show?pid=2679 我靠终于他妈自己做了一道题我靠; 还是水题555555555555; 题解我就不讲了; 但是对于dp我讲几点; 有些显然不可能的状态,一定要跳过;#include<cstdio>#include<cstring>#include<iostream>#define Ll long longus原创 2017-04-20 10:40:55 · 344 阅读 · 0 评论 -
博弈论+dp——洛谷P2964 [USACO09NOV]硬币的游戏A Coin Game
https://daniu.luogu.org/problem/show?pid=2964 本来博弈论就不懂,现在套上dp,直接萎了; 题解都看了半天; 我们搞一个f[i][j]表示还剩1~i的时候,上一个人选了j个; 显然i=n的时候是最开始,就是一个都没取; 现在我们倒着dp,所以一开始我们的读入也要倒着读; 关于这个f[i][j],它代表一个选手的状态,所以到底是先手还是后手我们不原创 2017-05-01 14:05:36 · 864 阅读 · 0 评论 -
dp——vijos1751 YYB写强化
https://vijos.org/p/1751 f[i][j]表示做了i个作业值为j有没有可能; 首先要把读入从小到大排序; 因为读入顺序不唯一,那么先做小的会有更多可能; 或者你j的枚举范围加一倍也可以; 然后对于负数你可以看代码#include<iostream>#include<cstdio>#include<cstring>#include<cstdlib>#includ原创 2017-05-09 14:19:34 · 241 阅读 · 0 评论 -
dp——洛谷P1437 [HNOI2004]敲砖块
https://daniu.luogu.org/problem/show?pid=1437 这道题不可以直接行列dp; 这样一个状态可以从非常多且复杂的状态更新过来; 很麻烦,不可取; 标算 https://wenku.baidu.com/view/934fa580d4d8d15abe234e48.html 这里讲的很好; 但是我们不用旋转三角形,直接在dp的时候换一下顺序就好啦;#i原创 2017-05-09 22:42:12 · 692 阅读 · 0 评论 -
水——洛谷P1026 统计单词个数
https://www.luogu.org/problem/show?pid=1026 为什么我离开大牛分站去主站刷水题了; 因为我水题压根就不会做#include<iostream>#include<cstdio>#include<cstring>#define Ll long longusing namespace std;int n,m,k;int l[10],d[500],s原创 2017-05-14 12:56:46 · 553 阅读 · 0 评论 -
二分图——洛谷P2825 [HEOI2016]游戏
https://www.luogu.org/problem/show?pid=2825 这个显然就是以行列来二分图; 因为二分图的话每个点最多连接一条边相当于这一行里放一个炸弹; 建图 遇到#就分段 比如 * * xx # * 这一行就分成两段; **xxxx这一行直接就是一段; 然后大力二分; 我一开始写法;#include<bits/stdc++.h>using namespa原创 2017-05-23 20:26:02 · 261 阅读 · 0 评论 -
dp——洛谷P1136 迎接仪式
https://www.luogu.org/problem/show?pid=1136 玄学dp 首先我们发现这道题有些奇怪的性质 交换k次,其实意味着k个j变成z,k个z变成j。而且每个字最多交换一次; 但是一次交换,有可能对答案的贡献+1 也有可能+2; 这个怎么办呢? f[i][j][k] 表示前i个里面,’j’变成’z’ j次 ‘z’变成’j’ k次; 通过s[i]和原创 2017-05-25 11:39:36 · 533 阅读 · 0 评论 -
dp——洛谷P1133 教主的花园
https://www.luogu.org/problem/show?pid=1133 一开始题目看错了,以为很水的; 然后0=爆蛋之后开始想标算; 想了半天就是不知道怎么处理这个环; 设f[i][j][k] 表示第i行第j列的答案; k=0表示前面比他小; k=1表示前面比他大; 但是这样我们第一位要靠第n位来更新; 那我们直接不更新第一位; 从第二位来,然后跑完后把n位和1位原创 2017-05-26 08:36:57 · 408 阅读 · 0 评论 -
洛谷 P2929 [USACO09HOL]传输延迟Transmission Delay——dp
https://daniu.luogu.org/problemnew/show/2929 唉,我好菜啊,不过我很高兴,有一点找回以前的感觉了,要是在努力一点就好啦; 第一问怎么求 我一开始以区间作为dp状态,发现他妈区间不独立的 那么就只好用0和1数量来dp了 f[i][j]表示i~n里面用j个0构成的方案; 这里是i~n而不是1~i是因为有第二问 状态么只要考虑当前放1还是0,是否满原创 2017-10-23 23:41:41 · 573 阅读 · 0 评论