
ACM_动态规划DP
文章平均质量分 52
动态规划之前刷的还是挺多的,这块知识也很多,好在核心思想不难。
I_have_a_world
这个作者很懒,什么都没留下…
展开
-
Max Sum Plus Plus HDU - 1024 (连续的n个数中求出和最大的不相交的m段+DP空间优化)
传送门题意:给定一个长为n(1<=n<=1e6)的数组,从其中找到不相交的m段,求能找出的m段中的数的和的最大值。题解:状态转移方程,dp[i][j]表示第 i 个数被分在第 j 段的最优解。因为没有给m,空间需要优化,优化成二维的。按照之前的思路直接将 j:=j&1 即可,这里,终于还是出问题了。 题解肯定是没错的,转化为一维的时候,一定要注意每个数的函数,而且dp[0][i],dp[1][i]因为不是数组中第一次赋值,需要特别注意。以下两行代码,坑我良多既然是需要从d原创 2021-06-05 22:19:46 · 176 阅读 · 0 评论 -
要变强,不空喊,ak题目,继续向前。(背包DP优化+bitset应用)
传送门题意: 题解:分组背包复杂度O(1e10),bitset优化O(1e10/32)bitset深入学习:C++ bitset 用法代码:/*https://ac.nowcoder.com/acm/contest/16806/C:要变强,不空喊,ak题目,继续向前。1.数据范围较小,背包问题,复杂度1e2*log(1e2)*1e6emmm写完才发现不是多重背包,而是分组背包,那么时间复杂度变成了1e2*1e2*1e62.试过优先队列,结果发现不是解决这个问题的。它解决.原创 2021-06-06 10:37:43 · 194 阅读 · 0 评论 -
luogu P1020 导弹拦截(DP,贪心)
题目链接:https://www.luogu.com.cn/problem/P1020题意:给定一行数字(导弹高度),一个导弹拦截器最开始可以拦截任意高度的导弹,但是之后每次只能够拦截高度不高于上一颗的导弹。第二问,问最少需要多少颗导弹拦截器才能拦截所有导弹?题解:我受了第一小题的影响。想要dp,实际上是贪心,每次,能取多少是多少,看最后能取多少字。(贪心很简单,证明贪心很难emmmm,原来贪心都不算简单!!!)代码:#include <bits/stdc++.h>#def原创 2020-10-27 22:01:50 · 209 阅读 · 0 评论 -
You Are the One HDU - 4283 (区间DP+从数组中某种顺序取数)
传送门题意:给定一个长度为n(<=100)的数组a(0<=ai<=100)。第k次取的数花费(k-1)*ai,每次遇到一个数(数组从前到后,栈从顶部到底部),你可以直接使用,或者如果没在栈中就将其放入栈中(先入先出,一会来取),在栈中就取它。(建议到传送门自己看看题意emm,叙述的不太行)题解:dp[i][j]表示第0到j-i+1次取完a[i~j]中的数的最小值。我们更新dp[i][j]:依据:a[i]是0~j-i+1中的第多少次取的。 如果为第k次取,那么 其中a[i]*原创 2021-06-07 19:23:18 · 151 阅读 · 0 评论 -
“kuangbin带你飞”专题计划——专题十二:基础DP1
写在前面1.开始时间:2021-05-272.专题传送门:[kuangbin带你飞]专题1-23 题目:1.Max Sum Plus Plus HDU - 1024 :2.Ignatius and the Princess IV HDU - 1029 :3.Monkey and Banana HDU - 1069 :4.Doing Homework HDU - 1074 :5.Super Jumping! Jumping! Jumping! HDU - 1087 :.原创 2021-05-27 19:28:58 · 445 阅读 · 0 评论 -
最少拦截系统 HDU - 1257 (最长上升子序列——O(nlogn))
传送门题意:给定n颗导弹(n默认为小于等于1e3吧),一套导弹拦截系统最开始能拦截任意高度的导弹,但是后面每次拦截的导弹的高度不能超过前一次拦截的导弹,现在有导弹依次袭来,给定每颗导弹的高度,问最少需要多少套导弹拦截系统。题解:求最长上升子序列,但是一直不知道为什莫是这样,最佳解释:【HDU - 1257】最少拦截系统(贪心)用导弹的高度来决定拦截系统的高度,然后每次都更新所有的已经存在的拦截系统的高度,如果没有大于等于导弹的高度的拦截系统,就添加一个拦截系统,然后继续遍历,直到遍历完为止。原创 2021-06-02 15:00:02 · 250 阅读 · 0 评论 -
Round Numbers POJ - 3252(数位DP+前导0的处理)
传送门题意:求[A,B]间的round数的个数。round数:划为标准二进制形式之后0的个数大于等于1的个数1<=A,B<=2e9题解:怎么设置数组dp?DP[pos][k1][k2],k1,k2分别表示0和1的个数怎么处理前导0,多设置一个像limit的标记数组lead就ok了(地位和limit一样,但是还与k1,k2的值有关)。处理前导0也是比较模板的东西代码:#include <cstring>#include <iostream>原创 2021-07-16 07:53:39 · 172 阅读 · 0 评论 -
Balanced Numbers SPOJ - BALNUM(数位DP+好题+排除前置0的干扰!!!!)
传送门题意:输入A,B(1<=A,B<=1e19),求[A,B]间的平衡数个数。平衡数:数位中每个为偶数的数出现奇数次,每个为奇数的数出现偶数次。例如: 77, 211, 6222 和112334445555677这些数为平衡数,但是351, 21 以及662就不是平衡数。题解:数位dp第一步就是找dp,然后就是套模板的东西了。一般dp知道怎么找,就能直接解出题目了,这一题,显然一个关键字,要来表示0~9的个数的情况。大佬博客SPOJ BALNUM (数位DP)提示三进制。(原创 2021-07-15 15:02:10 · 156 阅读 · 0 评论 -
luogu P2734 [USACO3.3]游戏 A Game(博弈,区间dp)
题目链接:https://www.luogu.com.cn/problem/P2734题意:给定一个长度为n(n>=2&&n<=100)的数组a(ai>=1&&ai<=200)。每次可以取一端的数,a和b两个人,a先取,都想要自己总长取最长,问最终两人各取了多少。题解:还是需要自己思考一下的,拿到的时候觉得很难,真的去想却发现远没那么难。这个题我好像之前在那里做到过但是却没多大印象emmm(忘了具体咋做了)。区间dp,枚举长度和起点,l原创 2020-10-25 16:21:32 · 233 阅读 · 0 评论 -
2021-07-08-F(x) HDU - 4734(数位DP+模板+总结1)
传送门这个专题的前几篇博客熟悉了数位DP的形式。现在慢慢来理解:2.1 关键是找到dp函数2.2 dfs-只需要注意边界操作和剪枝即可(dfs函数本身返回的值我们可以像dp一样把它当作已知值最优解)2.3 之前关注到的,什么时候初始化dp,确实是一个比较大的问题题意:定义数x=AnAn−1...A2A1x=A_nA_{n-1}...A_2A_1x=AnAn−1...A2A1定义函数 F(x)=An∗2n−1+An−1∗2n−2+...+A2∗2+A1∗1F(x)=A_n*2^{n-原创 2021-07-08 15:35:19 · 204 阅读 · 0 评论 -
FatMouse and Cheese HDU - 1078 (记忆化搜索+拓扑排序)
传送门题意:n*n格子(1<=n<=100),每个格子有一个数a[i][j](范围在0~100)。每次只能横或竖直跳,且最多跳k格,跳的下一位数要比当前位大。从(1,1)开始跳,问跳的数的和的最大值。题解:记忆化搜索见代码代码:#include <algorithm>#include <cstdio>#include <cstring>#include <iostream>#include <string>原创 2021-06-05 21:03:04 · 157 阅读 · 0 评论 -
2021-07-08-B-number HDU - 3652(数位DP+模板+深搜dfs)
传送门1.关键是找dp,其他就偏模板了2.模板:int a[N], cnt;int dp[N1][N2][N3];// dp[pos][x1][x2]int dfs(int pos, int x1, int x2, int limit) { if (pos == -1) return xxx; // xxx为0或1,表示以某个数为个位数是否满足 if (!limit && dp[pos][x1][x2] == -1) return dp[pos][x1][x2]原创 2021-07-08 13:36:53 · 151 阅读 · 0 评论 -
luoguP1018 乘积最大 dfs,dp,高精
链接:https://www.luogu.com.cn/problem/P1018题意,给定一串数字,长度最大为40,在数字中插入k个乘号,问怎样插入使得乘积最大。解法:最开始用dfs写,还是很不错的,过了8个样例,但是__int128也不支持超过40位的数字,所以最后两个样例总过了。发现题解也没有dfs的,就采取了他们的dp做法。dp:dp[k][i]表示前i个数字插入k个乘号的最大值,每次枚举最后一个乘号的位置,然后dp[k][i]=max(dp[k][i],dp[k-1][j]*xx(j+原创 2020-10-13 00:00:53 · 174 阅读 · 0 评论 -
Luogu P1220 关路灯(区间DP)
题目链接:https://www.luogu.com.cn/problem/P1220题意:给定n个灯,最开始村长在第s个路灯处。然后给定每个路灯的位置ai和每秒钟消耗的电量bi。(ai递增)(1<=s<=n<=50)。最开始关上s灯,不费时间。问从关s灯开始到关完所有灯最少花费多少时间。题解:dp[i][j][0/1]分别表示关掉i~j之间的灯后留在i还是j(每种情况又有两种转移状态,比如i可能是由i+1或者j转移而来)。然后枚举区间即可。另外还需要注意的是,需要原创 2021-01-31 17:39:21 · 190 阅读 · 0 评论 -
Bomb HDU - 3555(数位DP+模板)
传送门1.首次接触数位DP,可以先了解一下它的形式,然后变刷题边思考其原理,最后刷完这个专题之后再总结提炼一下它的思想2.(建议今后总结写在一个博客的最前面)**题意:**给一个数n(1<=n<=2^63-1),然后求出1~n中49子数和(比如49249=2,490302=1)题解:1.参考的带佬博客hdu3555 Bomb (秒懂的数位dp)2.代码:#include <cstdio>#include <cstring>#include <io原创 2021-07-08 09:39:09 · 187 阅读 · 0 评论 -
“kuangbin带你飞”专题计划——专题二十二:区间DP
写在前面:开始时间:2021-06-06博客:我的总结:DP基础知识总结 题意贡献:「kuangbin带你飞」专题二十二 区间DP题目:1.Cake ZOJ - 3537 :2.Halloween Costumes LightOJ - 1422 :3.Brackets POJ - 2955 :4.Coloring Brackets CodeForces - 149D :5.Multiplication Puzzle POJ - 1651 :6.Food Delivery原创 2021-06-06 19:50:30 · 290 阅读 · 0 评论 -
String painter HDU - 2476 (区间DP+字符串a->b的最小操作数&每次能将一个子串改成相同字符的子串)
传送门题意:给定两个字符串a,b,长度相等且不超过100。每次可以将a的一个子串改为江铜字符组成的子串,问最少多少次能将a变为b题解:这题稍微有点难了emm大佬题解:先不考虑a,dp[i][j]先表示将一个空串转化为b[i~j]的最小操作;然后再考虑a的影响,如果a[k]==b[k],dp[i][j]=min(dp[i][j],dp[i][k-1]+dp[k+1][j])。总结:重点是分成两步解决代码:大佬代码:#include <algorithm>#incl原创 2021-06-07 17:31:49 · 593 阅读 · 0 评论 -
Making the Grade POJ - 3666 (将一个数组变成 严格&不严格,不递增&不递减 的数组的最小代价)
传送门题意:给定一个数n(1<=n<=2000),然后是一个长度为n的数组a(0<=ai<=1e9)。ai改为bi的代价为abs(ai-bi),求将一个数组变为不严格不递增或者不严格不递减数组的代价。题解:为什么离散化正确:因为不严格,所以每次改变一定是变为a[i-1]或者a[i+1]是最优的情况 如果严格:那就会麻烦一点点的样子,可以先ai-=i,然后就变成了不严格的单调数组了 不严格单调增:dp[i][j]表示前 i 个数中最大值为 mp[j] 的最小操作数。状态原创 2021-06-01 22:10:46 · 347 阅读 · 0 评论 -
cf 1447D. Catching Cheaters(动态规划,字符串)
题目链接:https://codeforces.ml/contest/1447/problem/D题意:给定两个长度分别为n,m(<=5000)的字符串a,b。求最大的4*lcs(c,d)-|c|-|d|。lcs(表示两个字符串的最大子序列),c,d分别表示a,b的子串。题解:很容易想到动态规划,既然想到动态规划,就应该努力超这个方向去想。如果方向正确,就迟早有柳暗花明的一天。动态规划确实玄学,需要多练,但还是有规律可循的。这里,dp[i][j]表示a,b的前i,j个字符中最大的答案。原创 2020-11-19 21:53:01 · 198 阅读 · 0 评论 -
洛谷P1004方格取数(四维DP)
链接:https://www.luogu.com.cn/problem/P1004题意:给一个n*n矩阵(1<=n<=9)。从(1,1)到(n,n)走两次,第一次走过的方格处的值全变为0.求两条路径经过的所有值的和的最大值为多少。思路:首先看见这一题,感觉并不是一眼能看懂的那种题。做惯了简单题,就不想思考了。为了改变这种坏习惯,我决定还是想一下这一题。最后想到的思路就是,第一次取路径最大值,然后再回溯回去,路径上的值全部赋0,再求一遍最大值。写代码。。。过样例。。。提交。。。竟然还得原创 2020-09-29 20:02:15 · 165 阅读 · 0 评论 -
Halloween Costumes LightOJ - 1422 (区间DP+脱/穿是一个问题)
传送门题意:一个长度为n(<=100)的数组a(1<=ai<=100),ai表示参加活动 i 的时候需要穿的衣服类型,每次参加活动时可以选择穿上ai或者脱到ai为止(脱掉的这一件就不能穿了,下次需要这种就需要新穿一件),问参加完所有活动最少穿几次衣服。题解:dp[i][j]表示参加活动 i~j 穿的衣服的最少次数。最开始全部初始化为INF,然后慢慢考虑脱。每次在dp[i][i~j-1]的基础上更新dp[i][j]。只有当a[k:i~j-1]==a[j]存在而且留到参加活动 j原创 2021-06-06 20:49:05 · 209 阅读 · 0 评论 -
Balanced Number HDU - 3709(数位DP+枚举中心点+好题)
传送门题意:求[A,B]之内的平衡数0<=A<=B<=1e18平衡数:以某个点为中心,两边的权值和相等。其中每一位的等于离中心的距离∗*∗该位的数。例如4139以3为中心,左右两边权值和分别为4∗2+1∗1=94*2+1*1=94∗2+1∗1=9和9∗1=99*1=99∗1=9,即为平衡数。特别的,0~9都是平衡数题解:首先一个平衡数只可能以一个数位为中心,递增不解释枚举中心,然后某个数的权值和为0即为平衡数因为权值和可正可负,为避免出现负数,设置key,最初另一原创 2021-07-16 09:14:30 · 192 阅读 · 0 评论 -
cf 1433F. Zero Remainder Sum(DP)
题目链接:https://codeforces.ml/contest/1433/problem/F题意:给定n,m,k(大小1~70).然后再输入n*m矩阵。每一行最后选m/个,问怎样选能使最后的和最大(且还要ans%k==0)。题解:动态规划,mx[i][j]表示第i行模为j的最大值。唉emmm,其他不多说了,找个时间系统刷一刷dp。代码:#include <bits/stdc++.h>#define ll long long#define pi a原创 2020-10-26 15:53:35 · 144 阅读 · 0 评论 -
2021-07-08-Beautiful numbers CodeForces - 55D(数位DP+模板)
Beautiful numbers CodeForces - 55D1.果然,决心刷一个专题的时候,不需要立即就将正在做的题目理解。可以先多看看其他的题目,有时候,见的多了,思维发散了,自然而然就理解了(其实现在还没有完全理解,但是感受到了数位DP是怎样一个套路)2.题意:给定两个数l,r(1<=l<=r<=9e18),求[l,r]间漂亮数的个数(漂亮数:能被所有非0数位整除的数)题解:1.参考:Beautiful numbers CodeForces - 55D(数位DP)原创 2021-07-08 13:00:09 · 194 阅读 · 0 评论 -
DP总结全(从基础到提高)
目录前言:刷过的题/专题:1.“kuangbin带你飞”专题计划——专题十二:基础DP12.“kuangbin带你飞”专题计划——专题十五 数位DP3.基础知识:一、背包DP参考资料:1.01背包2.完全背包3.多重背包4.混合背包5.二维费用背包6.分组背包7.泛化物品的背包8.有依赖的背包9.杂项一些DP经典经典例题1.将一个数组变成 严格&不严格,不递增&不递减 的数组的最小代价2.矩形中求最大的对称正方形3.最长上升子序列4.最长公共子序列5.双端队列带权取数+区间DP前言:感原创 2021-07-16 11:10:58 · 1493 阅读 · 2 评论 -
“kuangbin带你飞”专题计划——专题十五 数位DP
写在前面:开始时间:2021-06-07博客:我的总结:DP基础知识总结 难度判断: [kuangbin带你飞]专题十五 数位DP题目:A - Beautiful numbers CodeForces - 55D B - XHXJ's LISHDU - 4352C - 不要62HDU - 2089D - BombHDU - 3555E - Round NumbersPOJ - 3252F - Balanced NumberHDU - 3...原创 2021-06-07 20:39:12 · 288 阅读 · 0 评论 -
两端子区间的最大值
题目1:https://ac.nowcoder.com/acm/contest/7738/B题目2:https://www.luogu.com.cn/problem/P1121题目1题意:给定一个长度大于2,小于等于2e5的环形序列,求暴力翻转任意一个子段区间之后的最大子区间和。题目2题意:给定一个长度大于2,小于等于2e5的环形序列,求两段子区间的最大值。环形,两段子区间和最大值=链,选两段子区间之后的最大值或者删除两端子区间之后的和(二者取最大值)//逆向思考两个题不同的是,1只能选原创 2020-10-03 08:42:40 · 176 阅读 · 0 评论 -
luogu P1037 产生数 (数据结构,数据间接转换)
题目:https://www.luogu.com.cn/problem/P1037题意,给定一个长度最大为30的数n,再给出k次变换,且满足:1.每一个数字只能变换为另一个一位数2.右边不能为0对于2,特判一下s[0]-'0'=0&&s.size()=1然后就只需要考虑第一位数是否为0就ok了。知识:判断是否能间接变换:1.我的dfs:mp[i]=k为i能直接变换为k(肯定比较好存)st[i]=j存储i能直接或简介变换为j每次调用为dfs(i,i).原创 2020-10-13 14:03:06 · 125 阅读 · 0 评论 -
Brackets POJ - 2955 (区间DP+最大括号匹配子序列)
传送门题目:给一个长度n(<=100)的只包含'[',']','(',)'的字符串,求最长的完全匹配的子序列。输出长度题解:区间dp,dp[i][j]表示i~j的最长匹配数,一支dp[i][k:i~j-1],怎么更新dp[i][j]?和Halloween Costumes LightOJ - 1422 (区间DP+脱/穿是一个问题)几乎一样。只有s[k]=='('&&s[k]==')'或者s[k]=='['&&s[k]==')'时才可能更新(+一组),否则只原创 2021-06-07 12:38:13 · 270 阅读 · 0 评论 -
2021-07-08-吉哥系列故事——恨7不成妻 HDU - 4507(数位DP+进阶模板题)
传送门如果思维不清晰,尽可以看别人的代码,然后梳理自己的思路,不要总是自己在那里研究(不是说不应该有自己的思维,只是要注意分寸,过度的自己思考只会浪费很多时间,因为我是在学新东西,而不是要造新东西。)所幸对数位DP有了进一步的理解收获&总结:从cnt-1位,即最高位开始dfs在写代码时默认dfs为最有子结构:如果dp[pos][x1][x2],那么我们默认为dfs(pos,x1,x2,limit)为最优解(具体操作交给更小的区间)。dp表示高位一定时的最优解:我们求到的dp[pos原创 2021-07-08 19:20:29 · 163 阅读 · 1 评论 -
cf1498D. Bananas in a Microwave(暴力,背包,优化)
转载题目链接:https://codeforces.ml/contest/1498/problem/D题意略:近来博客写的是越来越草率了。总结:1.小数弄成整数好操作一些2.很容易想到时间复杂度n*m*m的做法。挺明显是需要n*m的做法。m~0:如果之前已经有值了,那就一定是操作过了的(或是新操作,但是使用了机会的)。立即跳出循环所以复杂度期在O(n*m)。代码:#include <bits/stdc++.h>#define int long longu转载 2021-03-30 14:39:05 · 210 阅读 · 0 评论 -
Phalanx HDU - 2859 (矩形中求最大的对称正方形)
传送门题意:给定一个n*n正方形(0<n<=1000),求最大的对称正方形,对称线为从左下角到右上角的线。题解:从右上角开始递推求dp[i][j],怎么得来,看代码代码:#include <algorithm>#include <cstdio>#include <cstring>#include <iostream>#include <map>#include <string>// #def原创 2021-06-02 13:53:24 · 176 阅读 · 0 评论 -
Treats for the Cows POJ - 3186 (双端队列有权取数+区间DP)
传送门题意:一个长度小于等于2000的数组a,每次可以再头部或尾部取数,ai为第k个取的数,则需要花费k*ai的代价,求取完数的最大代价。题解:dp[i][j]表示前面取了a[0~i],后面取了a[j~n+1]的最大代价,很明显,dp[i][j]只与dp[i-1][j]或者dp[i][j+1]有关。代码:#include <algorithm>#include <cstdio>#include <cstring>#include <iostr原创 2021-06-02 20:05:24 · 210 阅读 · 0 评论 -
cf 1437C. Chef Monocarp(DP,背包)
题目链接:https://codeforces.ml/contest/1437/problem/C题意:T组样例每组一个n,然后大小为n的数组a(1<=ai<=n)。然后要求取n个不一样的数bi且>0,然后计算sum(abs(ai-bi))的最小值。题解:很像是背包对不对,背包是怎样的,容量为n,然后dp[i]表示容量为i的时候的最大值。这题,可以转化为背包,不过dpi表示最小值。//emmmm还是不擅长转化问题呀,简单题做多了emmm代码:#include原创 2020-10-28 12:40:44 · 577 阅读 · 1 评论 -
第二届INT杯 D排列计数(DP)
题目链接:https://www.coder.ac.cn/contest/5/problem/D题意:感受:被这一题卡死了。一直在想暴力或者使排列组合。也许使DP真的太弱了,都没有往这个方向想,这段时间没有再拓展宽度了,字符串倒是学了不少,感觉字符串挺常见的,现在对字符串的题目也比较敏感。u1s1,现在都还没有看的好懂,这一题。先放这里吧。题解:代码: read(n),read(k); dp[0]=1; rep(i,1,n){原创 2020-12-15 21:00:17 · 107 阅读 · 0 评论 -
cf1498C. Planar Reflections(DP)
题目链接:cf1498C.Planar Reflections转载题意略总结:1.昨天的心态本来就又出现问题了。————也就没真的想做出来这一题,这是不对的。2.昨天一直在想既然n,k都有既定的答案,那么应该可以预处理出所有dp[n][k],然后直接查询答案发现一个问题————我这样理解的dp[n][k]不正确,因为他还与后面的有纠缠。但是之后却还是在这条路上划水(就没想过能做出来emmm,这是我的惯病了emmm)。3.如果转换一下新思路,可能,本来很快就能解决这个问题!!!:::dp新思路转载 2021-03-30 11:59:18 · 250 阅读 · 0 评论 -
luogu P4017 最大食物链计数(DP,拓朴排序,食物网食物链数)
题目链接:https://www.luogu.com.cn/problem/P4017题意:给定n,m(n<=5000,m<=500000),然后m行每行两个整数a,b(b吃a),最后要求输出总的最长食物链(最左边为最高消费者,最右边为生产者)条数取mod题解:拓扑排序不难想,但是这里面坑还是不少的(反正我被坑了)。。。dp[i]为%mod之后的值,所以不能单纯的求mod的最大值。事实上只需要将所有的out[i]即出度为0的点的dp值加上取模就好了(唉,难道这就是我无脑取最大值太多的原创 2020-10-27 20:45:01 · 313 阅读 · 0 评论 -
C. Square Subsets(状压DP+二进制)
传送门题意:给定长度为n(<=1e5)的数组a(1<=ai<=70),找到有多少个非空组合的乘积为平方数,结果mod 1e9+7。题解:CF895C Square Subsets(状压dp)。dp[i][j]表示的是什么,怎么更新。dp[75][1<<19]会MLE,每一层都只由上一层觉得,所以二维滚动数组即可 i 表示的是1~70中的一个数,j 表示的是0~1<<19这些数(每个数表示一个组合:2,3,5,...的次数为奇数还是偶数)。dp[i][j原创 2021-06-06 15:35:59 · 141 阅读 · 0 评论 -
uva11022 String Factoring(kmp,区间dp)
题目链接:https://www.luogu.com.cn/problem/UVA11022题意:给定一个字符串s,长度<=80。可以合并ABABAB->(AB)^3。=2ABB->A(B)^2。=2ABBABB->(ABB)^2->(A(B)^2)^2。=2问最后最少可以由多少个字母表示。题解:区间dp。f[l][r]表示区间l,r的最小值。f[l][r]=min{f[l][i],f[i+1][r]}。kmp求l,r的周期,用于更新f[l]原创 2020-11-21 14:14:16 · 203 阅读 · 0 评论 -
luogu P1006 传纸条(四维dp,三维dp)
链接:https://www.luogu.com.cn/problem/P1006类似题目:https://www.luogu.com.cn/problem/P1004题意:给一个m*n矩阵,(m,n<=50)。小明在(1,1),小红在(m,n),小明先递东西给小红,然后小红递给小明。小明->小红只能向下或向右,小红->小明只能向上或向左。其他每个人最多只能帮助小明或小红一次,帮助了小明就不能帮助小红了。另外,每个人与小明小红有个亲密度。求所得最大亲密度和。题解1:直接改100原创 2020-09-29 21:38:04 · 181 阅读 · 0 评论