发人深省的dp
Richard_for_OI
老年退役选手orz
展开
-
poj3662 Telephone Lines
看动态规划看烦了,于是决定做一下我心心念念的图论。这题简直就是水题,二分答案呗。然而!!!这题居然也有动规做法,真是气鼓鼓。这个做法简直独一无二开创思维!!!!!这文章转载了李煜东前辈的想法,但是他并没有发在网上,我也找不到链接了。特此鸣谢李煜东前辈。用D(x, p)表示从1号节点到达基站x,途中已指定了p条电缆免费时,经过的路径上最贵的花费最小是多少(也就是选择一条从1到x的路径,使得路径上第p...转载 2018-02-13 12:51:07 · 292 阅读 · 0 评论 -
LCIS问题(最长公共上升子序列)
这篇文章就作为线性dp的第一篇文章吧。结合LIS与LCS,定义f(i,j)为a1~ai与b1~bj可以构成的以bj为结尾的LCIS的长度。设a0 = b0 = -∞,方便处理。则当ai ≠ bj时,f(i,j)= f(i - 1,j); 当ai = bj时,f(i,j) = max {f(i - 1,k)...原创 2018-02-13 12:03:13 · 423 阅读 · 0 评论 -
※bzoj1009
这题真心是挺难的!!!至少看solution前是这样的。题目的n到10的9次方,应该是要给它加个log才行。坦白说我的第一感觉以为这是一道字符串题。BUT!我字符串学的比较差,也没继续想。现在给出解法:首先是最神的dp函数定义:f[i][j]表示——匹配到主串的第i位为止(长的叫主串,短的叫模式串,这个是KMP算法里给出的定义),恰匹配上了模式串的第j位的总可能数。接下来再给出原创 2017-12-10 19:44:06 · 434 阅读 · 2 评论 -
bzoj1025
/*对于每种映射,可化成有向图的形式 此方案的排数就是存在的几个环环长的lcm而所有点都是参与环的,而且只有n条边,则所有环长和恒为n则对于一数列,只要和为n,他们的最小公倍数一定代表一种策略的排数 那么我们现在要求的就是,和为n的序列,它们的lcm有多少种可能 则有背包dp???于是对于一个数,我们验证这个数是否是排数的方式就是将这个数分解质因数,令x=p1^a1*p2^a2原创 2017-12-10 14:16:57 · 285 阅读 · 0 评论 -
bzoj1003
这道题一看到之后,第一感觉就是:最短路???但是贪心肯定是不行de偷偷告诉你们一个经验,当你做题时,第一印象想到贪心,但这题显然不能贪心,多半正解是dp那怎么更新呢?我们知道,如果存在某种走法虽然代价十分小,但适用范围很窄,照样说明不了什么于是我们存储一段时间中都可以适用的那条最短路径(虽然可能会没有)然后就去dp就好啦~#include #include #include原创 2017-12-06 20:35:03 · 225 阅读 · 0 评论 -
TJOI2018 d2t1 碱基序列
自古字符串题目,不是后缀就是dp......f[i][j]表示匹配到第i个串,已经匹配到了主串的第j位时的方案数。初值:f[0][x] = 0 (x∈[0, 10000])用哈希去判是否能更新。如果保险起见可以用KMP(单模式串匹配问题)。#include <cstdio>#include <cstring>#define mod 1000000007char s[1...原创 2018-05-15 21:06:11 · 363 阅读 · 0 评论 -
bzoj4300 绝世好题
4300: 绝世好题Time Limit: 1 Sec Memory Limit: 128 MBSubmit: 2628 Solved: 1437[Submit][Status][Discuss]Description给定一个长度为n的数列ai,求ai的子序列bi的最长长度,满足bi&bi-1!=0(2<=i<=len)。Input输入文件共2行。第一行包括一个整数n。第二...原创 2018-05-28 11:24:56 · 198 阅读 · 0 评论 -
[NOIP2017 d2t3] 逛公园
Problem给一张有向图(无重边、自环,如果有的话应该会麻烦许多吧)。求从1~n有多少种走的方案?其中每一种方案中,走的距离均不超过最短路+K。多组测试数据 + 此题数据范围 = NOIP2017卡常神题。Solution提供一种优美的做法——记忆化搜索。 建一个正图、一个反图。跑一次反向最短路(常用技巧)。 f[u][k]表示dis(u, n) ≤ MinDis(u, ...原创 2018-06-11 22:33:12 · 238 阅读 · 0 评论 -
[Apio2012] Guard
Solution有一些个位置一定是不能存在忍者的。于是我们把这些位置拿走,给所有的数据重标号。 做法:开一个长度为 nnn 的数组,对于一定是 000 的一段我们全赋为 111 。最终我们把为 111 的扔掉即可。可以用差分///线段树维护。若重标号后, n=kn=kn=k,那么所有草丛都必须有忍者。特判掉。 而若一个区间 AAA 完全包含另一个 BBB ( AAA 是大的 ),那么...原创 2018-09-10 15:33:33 · 278 阅读 · 0 评论