
UVA(紫书)
文章平均质量分 76
记录紫书的刷题日记
Happig丶
我的孤独,虽败犹荣
展开
-
UVa1521 GCD Guessing Game(唯一分解定理+素筛)
题目链接Paul had a birthday yesterday, and they were playing a guessing game there with Andrew: Andrew was trying to guess Paul’s age. Andrew knew that Paul’s age is an integer between 1 and n, inclusive...原创 2020-03-06 20:20:18 · 316 阅读 · 0 评论 -
UVA - 12093 Protecting Zonk(树形DP经典难题)
传送门时隔两个多月前来补题,这题真的有点难搞(吐槽= =)Reference:https://www.luogu.com.cn/problem/solution/UVA12093题解第二篇https://www.cnblogs.com/djh0709/p/9606749.html首先看到题目,不难发现对于某个节点,两种装置的影响如下图所示:其中分别用英文缩写代表了祖父,父亲,兄弟,当前节点uuu,儿子,孙子。这已经是影响的最大范围了但是我们考虑到编程难度,树形DP不就是在树上dfsdfsd原创 2020-08-17 19:34:04 · 366 阅读 · 1 评论 -
UVA - 1642 Magical GCD(区间gcd性质)
传送门单看LRJ的思路不太能完全解决该题,还有一些点必须要想到为什么不同的gcdgcdgcd的值最多只有log(max{a[i]}))log(max\{a[i]\}))log(max{a[i]}))个?考虑gcdgcdgcd的性质,设x=p1a1∗p2a2...,y=p1b1∗p2b2...x=p_1^{a_1}*p_2^{a_2}...,y=p_1^{b_1}*p_2^{b_2}...x=p1a1∗p2a2...,y=p1b1∗p2b2...,那么gcd(x,y)=p1min(a1原创 2020-07-30 09:54:55 · 276 阅读 · 0 评论 -
UVA - 1393 Highways(二维前缀和+dp)
传送门首先一个显而易见的GCD性质是当且仅当gcd(abs(x1−x2),abs(y1−y2))=1gcd(abs(x1-x2),abs(y1-y2))=1gcd(abs(x1−x2),abs(y1−y2))=1时两点连线不经过其他点。我们设数组d[i][j]d[i][j]d[i][j]表示(1,1)(1,1)(1,1)到(i,j)(i,j)(i,j)之间的合法直线个数,如下图所示:根据二维前缀和的知识,得到:d[i][j]=d[i−1][j]+d[i][j−1]−d[i−1][j−1]+(gcd原创 2020-07-29 22:36:32 · 194 阅读 · 0 评论 -
UVA - 11440 Help Tomisu(欧拉函数)
传送门本题确实是比较难想的,需要一定的数论思维能力:首先因为M≤NM\leq NM≤N,因此N!N!N!是M!M!M!的整数倍,所有质因子都大于MMM等价于和M!M!M!互质。然后根据最大公因数的性质gcd(a,b)=gcd(b,a%b),a>bgcd(a,b)=gcd(b,a\%b),a>bgcd(a,b)=gcd(b,a%b),a>b,大于M!M!M!的数当且仅当模M!M!M!与M!M!M!互质才可以,问题转化为求M!M!M!的ϕ\phiϕ值接下来是欧拉函数比较重要的性质:原创 2020-07-29 21:53:42 · 161 阅读 · 0 评论 -
UVA - 10288 Coupons(期望的性质)
题目链接假设已经收集了kkk个图案,那么拿到一个新图案的概率为n−kn\frac{n-k}{n}nn−k,根据期望的性质,概率为p的期望会在1/p次后发生,那么答案就是∑i=1nnn−i\sum_{i=1}^{n}\frac{n}{n-i}∑i=1nn−in实际上LRJ在紫书上是手推证明了这个性质:令s=k/ns=k/ns=k/n,拿一个新的需要ttt次的概率为st−1(1−s)s^{t-1}(1-s)st−1(1−s),期望为EEE。因此需要的平均次数为(1−s)(1+2s+3s2+4s3+.原创 2020-07-14 11:46:21 · 237 阅读 · 0 评论 -
UVA - 580 Critical Mass 四种方法(dp/暴力)
题目链接吐槽:组合数学的方法是最难想的(对本题而言)dp方法一这种是比较容易想到的DP,求安全系数。设f[i][0/1/2]f[i][0/1/2]f[i][0/1/2]分别表示当前第iii位以L;U;UUL;U;UUL;U;UU结尾的个数,显然当要出现三个UUU时立刻截断,则:int solve1(int n){ f[1][0]=f[1][1]=1; f[1][2]=0; for(int i=2;i<=30;i++){ f[i][0]=f[i-1][原创 2020-07-12 10:11:52 · 567 阅读 · 0 评论 -
UVA - 1637 Double Patience(全概率+记忆化搜索)
题目链接Reference:https://blog.youkuaiyun.com/weijifen000/article/details/82262821设当前状态为aaa,那么可以转移到下面的若干个状态bib_ibi设事件WWW为“游戏成功”,事件AAA为“实现状态AAA”,事件BiB_iBi为“出现状态bib_ibi”,则事件(A∣Bi)(A∣Bi)(A∣Bi)为“出现状态bib_ibi的条件下游戏成功”,事件(W∣A)(W∣A)(W∣A)为“在状态aaa的条件下游戏成功”,则根据全概率公式P(原创 2020-07-09 23:11:09 · 144 阅读 · 0 评论 -
UVA - 11181 Probability|Given(条件概率+状压dfs)
题目链接设事件AAA为:mmm个人买了东西,事件BiB_iBi为:第iii个人买了东西。显然要求的是条件概率P(Bi∣A)=P(ABi)P(A)P(B_i|A)= \frac{P(AB_i)}{P(A)}P(Bi∣A)=P(A)P(ABi)求P(A)P(A)P(A)就是nnn个人里面恰好有mmm个状态为111,那么我们考虑状压搜索;而P(ABi)P(AB_i)P(ABi)是两事件同时发生的概率,那么就是满足P(A)P(A)P(A)的合法状态里将每个为111的人对应的P(ABi)P(AB_i)原创 2020-07-09 22:50:22 · 245 阅读 · 0 评论 -
UVA - 1636 Headshot(条件概率)
题目链接紫书上讲的并不是完全正确,考虑到概率论的知识此题很简单:设事件A为第一枪放空,事件B为直接再扣一枪也放空。问题就是在A事件发生的条件下求事件B的概率,那么就是P(B∣A)=P(AB)P(A)P(B|A)= \frac{P(AB)}{P(A)}P(B∣A)=P(A)P(AB),第一枪对应字符串"0",第二枪对应字符串"00"如果是随机转动到一个位置为空枪,那么就是字符为"0"的位置随机选取,相当于在样本容量为字符串长度中随机抽样,显然概率P=P(0)nP= \frac{P(0)}{n}P=原创 2020-07-09 22:35:11 · 148 阅读 · 0 评论 -
UVA - 1635 Irrelevant Elements(质因数分解)
传送门因为组合数的计算公式是递推过来的,那么首先对mmm质因数分解,接着我们对组合数的计算中间变量每次质因数分解,即分子n−i+1n-i+1n−i+1分解的质因数都加一,iii分解的质因数都减一,然后遍历mmm的所有质因数,当且仅当组合数的所有质因数个数均大于等于mmm的个数才可以作为答案注意几个细节:一是nnn一开始要先减一最后的答案都加一;二是分解质因数的过程中最后一步要特判是否分解到111,因为该数可能是大于其根号的一个质数#include <set>#include <m原创 2020-07-08 20:06:33 · 250 阅读 · 0 评论 -
UVA - 12716 GCD XOR(找规律+枚举技巧)
传送门一开始想的是,先枚举aaa,对每个aaa因数分解,可是这样做的世界复杂度为O(n∗n)O(n*\sqrt{n})O(n∗n),显然不是LRJ提到的O(nlogn)O(nlogn)O(nlogn)然后这题数据太大也不能打表,只能看看题解怎么做了。原来我们不需要枚举aaa,而是枚举范围内的所有因数ccc,然后找到这个因数在范围内的若干倍,这样就类似素数筛选那里了,但是这样只是求某个数有多少对,因此还需要累积前缀和,预处理即可#include <set>#include <ma原创 2020-07-08 16:48:06 · 215 阅读 · 0 评论 -
UVA - 10791 Minimum Sum LCM(质因数分解)
题目链接还是我孤陋寡闻了,一开始用素筛,想着怎么也筛不到1e9,然后就GG了,实际上对单个数质因数分解不需要使用素筛,这里就学习一下吧!原创 2020-07-08 15:09:57 · 273 阅读 · 0 评论 -
UVA - 12169 Disgruntled Judge(枚举+扩展欧几里得)
题目链接这道题一开始并不知道怎么做,尽管想到了枚举,但是枚举的时间复杂度为O(t∗n2)O(t*n^2)O(t∗n2),然后就没多想了(但是UVA牛掰的评测机似乎可以跑过)看LRJ的分析是,想办法得到aaa,然后再计算出bbb。但是表达式中的取模似乎很难解决,然后就卡住了…实际上是我太年轻,这点东西都没想到:已知x3=[a((ax1+b)%10001)+b]%10001x_3=[a((ax_1+b)\%10001)+b]\%10001x3=[a((ax1+b)%10001)+b]%10001,化原创 2020-07-08 08:48:42 · 240 阅读 · 0 评论 -
UVA - 11582 Colossal Fibonacci Numbers!(找循环节)
题目链接首先紫书上描述有误,f(0)=0,f(1)=1f(0)=0,f(1)=1f(0)=0,f(1)=1关于循环节的最大寻找长度,紫书上解释说余数最多nnn种,那么最多n2n^2n2项就会出现重复。我一开始觉得这是一个组合数学的问题,但是想了想觉得中间有递推关系,严格的证明不会。但是数学规律题一般都能取巧的,我们可以把nnn取1−10001-10001−1000所有的周期打个表,然后找下最大的即可吐槽下此题玄学RE,2e6也RE,搞吐了#include <set>#include原创 2020-07-07 08:26:19 · 164 阅读 · 0 评论 -
UVA - 12589 Learning Vector(01背包)
题目链接贪心部分决策是混乱的,如何求得最后的最大面积呢?这就用到计算几何的一些知识了,要想总的面积越大,也就是前面的向量越上凸越好,因此我们需要将所有向量先贪心地按照高度降序处理,接着开始DPDP部分考虑到每个点选或不选,而且可以从前向后转移,那么设d[i][j][k]d[i][j][k]d[i][j][k],代表考虑当前第iii个点,已经选过了jjj个点,当前高度为kkk,那么有:d[i][j][k]=max(d[i][j][k],d[i−1][j−1][k−p[i].y]+f(p[i],k−原创 2020-07-04 13:50:19 · 167 阅读 · 0 评论 -
UVA - 1543 Telescope(简单几何+区间DP)
题目链接几何部分已知圆的半径为1,我们看如何求出圆上两点距离:首先∠AOB∠AOB∠AOB已经确定,为θ=2π∗(α−β)θ=2π*(α-β)θ=2π∗(α−β),那么我们可以求出△AOB△AOB△AOB的面积S=r2∗sinθ2=r2∗sinθ2∗cosθ2{S=\frac{r^2*sinθ}{2}=r^2*sin\frac{θ}{2}*cos\frac{θ}{2}}S=2r2∗sinθ=r2∗sin2θ∗cos2θ,设∣AB∣=x|AB|=x∣AB∣=x,从OOO点作ABABAB的垂线原创 2020-07-04 11:29:03 · 263 阅读 · 0 评论 -
UVA - 1633 Dyslexic Gollum(状压DP)
题目链接这个题一开始想不会写,因为不含长度至少为kkk的回文连续子串是一个比较模糊的概念,后来去参考这个博客,思路逐渐清晰证明部分所有大于等于kkk的回文子串一定包含一个长度为小于kkk的回文子串:当kkk为奇数的时候,要凑成长度为kkk的回文串需要一个前缀为k−2k-2k−2的奇数个数回文串,例如1010,k=51010,k=51010,k=5,含有的回文子串为010010010,最后加上111即可构成长度为k的回文串;或者一个长度为k−1k−1k−1的偶数回文串两边各匹配一个相同的值来凑成,例原创 2020-07-03 21:58:43 · 256 阅读 · 0 评论 -
UVA - 10163 Storage Keepers(二分答案+01背包)
题目链接首先感谢洛谷大佬rayluo的详细题解,万分感激%%%整个问题分为二分和DP两部分二分看到最小的最大、最大的最小这类字眼就需要考虑二分答案。假设我们二分出来的值为xxx。为了使xxx可行,也就是说每一个仓库的安全值都要大于等于xxx。而我们注意到,在这个式子中pip_ipi为定值,kkk越大,式子的值越小,那么在pik≥x{\frac{p_i}{k} \geq x}kpi≥x 的情况下,kkk是有最大值的,为pix{ \frac{p_i}{x} }xpi,我们只需要使得每一个守卫原创 2020-07-03 20:28:02 · 527 阅读 · 0 评论 -
UVA - 1632 Alibaba(区间DP)
题目链接吐槽一波:这题目没有数据范围有点NT和前面的修缮长城差不多了,就是裸的区间DP(实际上更简单一些),然后本题需要注意的只有两个地方,一个是在宝物恰好消失的那一秒是到达是取不到宝物的;另外一个地方是区间DP的一种写法是会T的——也就是在讲最优矩阵链乘接触的写法,而写逆推的话是OK的,真是一道奇怪的题目#include <set>#include <map>#include <stack>#include <queue>#include &原创 2020-07-03 19:28:05 · 157 阅读 · 0 评论 -
UVA - 1631 Locker(记忆化搜索)
题目链接1.首先如果只转动一位,那么不难发现每一位是互不影响的。而本题可以同时最多转动三位。那么我们不难发现,因为第二位第三位什么决策最优是未知的,但是当前位最少的转动次数是一定的(要么向上要么向下)。在将第一位转动到正确位置的过程中,第二位第三位可以转也可以不转,那么我们需要枚举所有的情况进行状态转移2.然后观察上图,原位置设为aaa,目标未知设为bbb,因为二者的大小关系是不确定的,但是一共只有十位,因此我们无需分类讨论,只需使用取模的技巧:若向上转,则需要u=(b[cur]+10−x)u=原创 2020-07-03 19:17:19 · 300 阅读 · 0 评论 -
UVA - 10723 Cyborg Genes(类LCS)
传送门首先如果要求出最优解长度,实际上就是类似LCSLCSLCS的做法,只是LCSLCSLCS只保留公共部分作为答案,那么本题只需保存一下非公共的部分:设d[i][j]d[i][j]d[i][j]表示字符串s1s_1s1判断到位置iii,字符串s2s_2s2判断到jjj时的最短串的长度,边界是d[i][0]=d[0][i]=id[i][0]=d[0][i]=id[i][0]=d[0][i]=i,那么有:如果s1[i−1]==s2[j−1]s_1[i-1]==s_2[j-1]s1[i−1]==s原创 2020-06-30 11:10:01 · 183 阅读 · 0 评论 -
UVA - 242 Stamps and Envelope Size(类完全背包)
传送门首先紫书描述不清,最大连续邮资是从111开始,增量为111、用给定邮票拼出来的多个邮资。1,2,3,4,51,2,3,4,51,2,3,4,5是,而2,3,4,5,62,3,4,5,62,3,4,5,6不是注意输出格式状态转移我们知道这个题状态的转移必须是由较小的和转移到较大的和,而且如果贴三张邮票,那么可以由贴两张对应邮票的状态再加一张转移而来。因此我们没有必要枚举每种邮票贴几张,而是枚举邮票的和设d(j)d(j)d(j)为当前邮票和为jjj时需要的最小邮票个数,kkk是一张邮票的下标,原创 2020-06-30 10:41:29 · 418 阅读 · 0 评论 -
UVA - 1630 Folding(字符串处理+区间DP)
传送门首先我们观察到若一个串可以折叠,那么必然是折叠后的长度小于原来长度。然后还有一点,还可能是这个串的两部分折叠后拼接,实际上对应着另外一种转移的情况。那么不难发现这是一个区间DP的问题状态转移设d(i,j)d(i,j)d(i,j)为区间[i,j]折叠后的最小长度,区间长度为lll,那么我们先考虑是否可以自身折叠,设resresres为我们求出该区间的最小周期,字符串tmptmptmp为周期个数对应字符串,则有:d[i][j]=tmp+′(′+d[i][i+res−1]+′)′,tmp.size原创 2020-06-30 10:08:08 · 259 阅读 · 0 评论 -
UVA - 1629 Cake slicing(记忆化搜索)
传送门一个矩形可以用左上角的坐标和右下角的坐标来表示,实际上就是暴力枚举每个切割的阶段,这里使用了两个记忆化,一个是已经切割的状态,另外是一个(x1,y1)到(x2,y2)(x_1,y_1)到(x_2,y_2)(x1,y1)到(x2,y2)矩形内的樱桃个数。切割时一些细节注意一下就好了#include <set>#include <map>#include <stack>#include <queue>#include <math.原创 2020-06-29 12:46:12 · 182 阅读 · 0 评论 -
UVA - 10118 Free Candies(记忆化搜索/状压)
传送门方法一一开始我确实是这样想的,设d[i][j][k][p][S]d[i][j][k][p][S]d[i][j][k][p][S]为四堆分别拿了i,j,k,pi,j,k,pi,j,k,p个,当前已拿糖果用状态压缩为SSS,但是很明显,最多20种糖果,最后的空间为40∗40∗40∗40∗(1<<20)40*40*40*40*(1<<20)40∗40∗40∗40∗(1<<20),内存爆了啊,然后就GG了后来去洛谷看到一篇题解,和上述思路类似。也就是说如果我们想知道原创 2020-06-29 12:38:11 · 207 阅读 · 0 评论 -
UVA - 10285 Longest Run on a Snowboard(记忆化搜索)
传送门多阶段的决策问题,肯定是记忆化搜索了设d(i,j,dir)d(i,j,dir)d(i,j,dir)为在坐标(i,j)(i,j)(i,j)处向dirdirdir方向走出的最长路,然后有:d(i,j,dir)=max(d(i+dx,j+dy,k)),a[i][j]>a[i+dx][j+dy],0<k<4d(i,j,dir)=max(d(i+dx,j+dy,k)),a[i][j]>a[i+dx][j+dy],0<k<4d(i,j,dir)=max(d(i+dx,j原创 2020-06-29 09:53:15 · 167 阅读 · 0 评论 -
UVA - 1628 Pizza Delivery(区间DP)
传送门一开始以为O(n4)O(n^4)O(n4)是过不了代码的,但是回顾了之前LRJ分析时间复杂度下最大数据量,1e8是可以在1s内解决的本题因为罚款和送餐时间相关,而这个时间无法记录。考虑之前的时间归零技巧,那么需要知道后面送的人数,于是增加一维状态记录人数,接着正常的区间DP即可。状态的定义比较复杂,区间DP还是尽量写记忆化搜索,尝试写了一下递推但是样例没过,心态炸了,还是记忆化搜索方便= =#include <set>#include <map>#include原创 2020-06-27 23:47:54 · 259 阅读 · 0 评论 -
UVA - 12170 Easy Climb(dp+离散化+单调队列优化)
传送门首先看下简化版的问题分析,当n=3n=3n=3时,只有h2h_2h2是可以修改的,而且修改之后必须同时在[h1−d,h1+d],[h3−d,h3+d][h_1-d,h_1+d],[h_3-d,h_3+d][h1−d,h1+d],[h3−d,h3+d]之间,即[max(h1,h3)−d,min(h1,h3)+d][max(h_1,h_3)-d,min(h_1,h_3)+d][max(h1,h3)−d,min(h1,h3)+d]。如果这个区间是空的那么无解;否则我们发现h2h_2h2原创 2020-06-27 23:35:38 · 348 阅读 · 6 评论 -
UVA - 10559 Blocks(区间DP+思维)
传送门问题的分析见紫书,LRJ老师解释的很详细%%%这道题学到了以下感悟:学会如何分析问题,转化为DP模型(区间DP),尝试正常的区间DP状态定义——行不通。结合问题,尝试改变状态定义或者增加维度以实现正确思路。本题就是在区间DP的基础上确定了增加一维来表示右边拼上一些方块得到的最大得分区间DP的解决,使用记忆化搜索比DP更加简单且不易出错,就按照LRJ的模型学习掌握即可#include <set>#include <map>#include <stack&原创 2020-06-26 23:54:58 · 349 阅读 · 0 评论 -
UVA - 12099 The Bookcase(01背包问题+优化)
链接紫书没有提到的是,这三个书架都是非空的容易知道,高度最大的那本书一定是某层的高度,那么我们假设它在第一层。因为某一层的高度是取所有书的max(H)max(H)max(H)而宽度是sum(d)sum(d)sum(d),因为这层书的高度是不容易转移的,但是宽度之和却容易转移,那么将宽度和作为决策的一部分状态状态转移设d(i,j,k)d(i,j,k)d(i,j,k)表示安排完前iii本书,第二层的宽度之和为jjj,第三层的宽度之和为kkk时,第二层和第三层高度和的最小值。当然将书按高度从大到小排序,原创 2020-06-26 23:45:01 · 293 阅读 · 0 评论 -
UVA - 1204 Fun Game(字符串模拟+状压DP)
传送门第一部分实际上这一部分就是解决LRJ老师说的简化版问题问题描述给出nnn个字符串,找到一个最短的字符串,使得这nnn个字符串都是它的连续子串,输出其长度状态转移实际上最后的答案是nnn个字符串的长度之和减去每个串和前一个串的最大重叠长度设d(i,j)d(i,j)d(i,j)表示已经选过的字符串集合为iii,最后一个字符串为jjj时,可以减去的重叠部分总长,预处理任意两个字符串的最大重叠长度为w(i,j)w(i,j)w(i,j)。考虑由当前状态更新未知状态,那么:d(i+k,k)=ma原创 2020-06-25 19:56:21 · 284 阅读 · 0 评论 -
UVA - 12105 Bigger is Better(DP)
传送门首先,此类问题——模某个数的动态规划,一般都是从其他余数转移而来然后本题用到了一个比较重要的大数求余的性质,也就是说大数可以一位一位得操作从而达到取余的目的,可以参考这里方法一状态转移设d(i,j)d(i,j)d(i,j)表示用iii根火柴能拼出的除以mmm余数为jjj的最大数,使用字符串string表示大数。因为状态的转移是互相独立的,那么考虑刷表法,设d(i,j)d(i,j)d(i,j)拼上当前个位数kkk后为curcurcur,由当前状态更新未知状态:d(i+c(k),(j∗10+原创 2020-06-25 00:06:42 · 178 阅读 · 0 评论 -
UVa10817、UVa1252(状压DP+记忆化搜索)
10817这道题状态的定义还算好理解,但是不太懂为什么要记忆化搜索,搜了几十篇题解差不多都是记忆化搜索,不知道递推能不能解决这道题,先放着吧#include <set>#include <map>#include <stack>#include <queue>#include <math.h>#include <cstdio>#include <string>#include <bitset>原创 2020-06-23 16:46:43 · 180 阅读 · 0 评论 -
UVA - 10934 Dropping water balloons(思维+dp)
传送门很神奇的一道题,看起来是求最小的实验次数,实际上程序主体并没有用到minminmin,而是递推解决问题,先看下LRJ的思路:设d[i][j]d[i][j]d[i][j]用i个气球实验j次所能测试楼的最高层数,第一次决策,设测试楼层为kkk:如果气球破了,说明前k−1k-1k−1层必须能用i−1i-1i−1个球实验j−1j-1j−1次测出来,也就是说k=d[i−1][j−1]+1k=d[i-1][j-1]+1k=d[i−1][j−1]+1是最优如果气球没破,则相当于把第k+1层楼看作1楼原创 2020-06-23 21:00:03 · 234 阅读 · 0 评论 -
UVA - 1336 Fixing the Great Wall(经典区间DP)
传送门这样的题目见过几次了,给出起点,遍历若干坐标,每次既可以向左走又可以向右走,每个点对应权值函数,然后找一个最优的走法1.首先需要想到的一点是,因为修理某点不耗费时间,所以假如下一个点是对应需要修理的最优点,那么从当前点到下一个最优点的路途中,可以顺便修理中间的点,那么这样就是最优花费。那么我们在修理过程中,已修理的区间一定是连续的,那么考虑区间dp2.因为不知道当前时间,因此费用不能在到达某点时再计算,而是事先将肯定会发生的费用累加到答案中,然后“时钟归零”。对于所有区间显然需要按坐标排序,这原创 2020-06-24 13:37:39 · 239 阅读 · 0 评论 -
UVA - 1626 Brackets sequence(区间DP+打印解)
传送门本来这个题只需要学习一下dp的打印解,但是通过紫书的代码,又学到了一手区间dp的写法,证明如下因为区间dp的本质是根据i-j递增的顺序来枚举,因此还能i逆序,j顺序的方法解决问题以长度为3的区间为例分析一下正确性:容易知道长度为2的区间能够正确递推,而长度为3的区间,我们的顾虑是并不能得出[L,m2][L,m_2][L,m2]但是在下面从i−ji-ji−j枚举kkk时,第一次更新了区间[L,m1][L,m_1][L,m1],第二次刚好更新了[L,m2][L,m_2][L,m2],长原创 2020-06-01 12:04:59 · 258 阅读 · 0 评论 -
UVA - 10003 Cutting Sticks(区间DP)
传送门此问题类似于最优矩阵链乘,只不过将子问题之间的乘法换成了相互递推的求和状态转移设原创 2020-05-23 11:01:36 · 201 阅读 · 0 评论 -
UVA - 11584 Partitioning by Palindromes(dp+回文串)
传送门设d(i)为字符1~i划分为最小回文串的个数(下标从1考虑)d(i) = min { d(j) +1 | s[j+1~i]是回文串 }可以先用O(n2)的时间复杂度预处理字符串的每个子串是否为回文串,有如下两种方法:暴力实际上以字符串的某个字符为中心,使用双指针向两边扩散,但是要分为三种情况具体讨论回文串长度为奇数,那么该字符为中位数,初始指针分别为该元素下标的前一个和后一个回文串长度为偶数,且该字符作为中心线偏左的元素,初始指针分别为该元素下标本身和后一个回文串长度为偶数,且该字符原创 2020-05-12 10:21:20 · 187 阅读 · 0 评论 -
UVA12563 Jin Ge Jin Qu hao(01背包)
传送门1.一开始以为是01背包的板子,便设计了两个数组一个记录在时间j时最多唱的歌,另一个记录在时间j下最多唱多长时间(有点别扭)。然后wa了,再读题发现题目要求先尽量满足总曲目,再保证时间尽量长,然后这样更新:if(d[i-x]+1>=d[i]){ f[i]=max(f[i],f[i-x]+x); d[i]=max(d[i],d[i-x]+1);}还是WA,无奈之下求助题...原创 2020-05-07 20:40:11 · 232 阅读 · 0 评论