![](https://img-blog.csdnimg.cn/20201014180756926.png?x-oss-process=image/resize,m_fixed,h_64,w_64)
区间dp
文章平均质量分 57
1
1E6
这个作者很懒,什么都没留下…
展开
-
F - Make Pair (区间dp)
F - Make Pair 题目链接 大致题意: 有2*n个同学,给出m个同学对(x,y),表示x可以与y组队.其他同学均与x和y无法组队. 一共进行n次操作.每次操作针对相邻的同学,如果相邻同学可以组队,则组队,并把组好队的同学从序列中剔除,再把序列连接起来,使被移除学生的左边和右边的两个学生现在是相邻的. 问,一共有多少种操作方案,使得所有同学都两两组队.(mod 998244353) 解题思路: 数据范围小,区间dp 状态表示: f[i][j]f[i][j]f[i][j]表示区间i到j的操作方案数原创 2021-09-06 15:26:46 · 138 阅读 · 0 评论 -
第 45 届国际大学生程序设计竞赛(ICPC)亚洲区域赛(昆明) Cities (区间DP)
Cities (区间DP) 题目链接 大致题意: 一个长度为 n 的数组,一次操作可以选择一段连续值相同的区间,使其变成其他值,问最少需要多少次操作,才能使得数组的值全相等 数组中每个数最多出现15次 解题思路: 首先将数组去重,使得相邻元素不同,定义last[i]表示为上一次a[i]出现的位置(这是关键,因为我们要尽量减少操作次数,所以我们尽可能选择左右端点相同的进行操作) 有f[l+1][r]+1和f[l][r-1]+1两种转移,我们定左端点,从右往左进行dp,即f[l][r] = f[l][r - 1原创 2021-04-20 19:21:51 · 230 阅读 · 0 评论 -
POJ - 1141 Brackets Sequence(区间DP+递归)
题目链接: [Brackets Sequence] 大致题意: 输出添加括号最少,并且使其匹配的串 解题思路: dp[i][j]为从第i 个字符到第j个字符组成的子串要成为正规子串最少要添加多少字符 初始化: dp[i][i]=1,一个字符一定需要补充一个字符匹配 如果s[i] == ‘(’ && s[j] == ‘)’ || s[i] == ‘[’ && s[j] == ‘]’,dp[i][j]=min(dp[i][j],dp[i+1][j-1]) 否则,dp[i][j原创 2020-09-19 15:30:56 · 92 阅读 · 0 评论 -
HDU - 4745 Two Rabbits(区间DP)
题目链接: [Two Rabbits] 大致题意: 有一个环,现在有两只兔子各从一个点开始起跳,一个沿顺时针,另一个沿逆时针,只能在一圈之内跳,并且每次所在的点的大小必须相同,问最多能经过几个点 解题思路: 环状的话可以先倍增改成链这道题目的话就是求最长回文子串 状态初始条件:dp[i][i]=1 (i=0:n-1) 状态转移方程:dp[i][j]=dp[i+1][j-1] + 2 if(str[i]==str[j]) dp[i][j]=max(d原创 2020-09-18 14:46:29 · 222 阅读 · 0 评论 -
HDU - 4632 Palindrome subsequence(区间DP)
题目链接: [Palindrome subsequence] 大致题意: 求字符串有多少回文子序列(可以不连续) 解题思路: dp[i][j]表示从i到j有多少回文串 首先dp[i][j]=dp[i+1][j]+dp[i][j-1],但是dp[i+1][j]和dp[i][j-1]有公共部分,所以最后要减去dp[i+1][j-1],如果s[i]==s[j]的话,还要加上dp[i+1][j-1]+1 这里mod的原因是,有可能dp[i][j-1] = 10008,然后取模之后变成了1,然后 dp[i+1][原创 2020-09-16 20:19:02 · 79 阅读 · 0 评论 -
HDU - 4283 You Are the One(区间DP)
题目链接: [You Are the One] 大致题意: 给出n个数,每个数字都需要进栈然后出栈,第i个数出栈需要的花费是(i-1)*第i个出栈的权值,求所有数出栈需要的最小花费是多少 解题思路: dp[i][j]表示第i个人到第j个人的最小花费 对于区间 [i,j] 将第i个人安排为第k个上场的,那么根据栈的原理,从i+1到k个人是在i前面上场,从k+1到j个人是在i后面上场 对于后面这一部分,因为从k+1到j个人的前面每插入一个人,每一位的花费的倍数都要++,所以前面插入几个人就要把后面的sum就原创 2020-09-15 17:11:09 · 104 阅读 · 0 评论 -
POJ - 3280 Cheapest Palindrome(区间DP)
题目链接: [Cheapest Palindrome] 大致题意: 给出一个包含n个字符长度为m的字符串,接下来给出n和字符和其对应添加和删除的花费,问最少花费多少使原字符串变成回文串 解题思路: 首先说删除和添加的花费,这两种操作是等价的(这头加和那头减是一样的),所以我们只需要保留一个最小花费就可以 dp[i][j]表示字符串的子区间[i,j]的最小花费,有三种情况: 1.如果s[i]==s[j],那么dp[i][j]=dp[i+1][j-1] 2.如果dp[i+1][j]是回文串,那么dp[i][原创 2020-09-14 15:20:20 · 140 阅读 · 0 评论