区间DP
文章平均质量分 51
hesorchen
这个作者很懒,什么都没留下…
展开
-
uva10453动态规划+递归回溯
题目给一个字符串,可以在任意位置增加任意字符,求最小增加多少个字符使字符串变成回文串,并输出一种方案。求最小代价的题已经写过了,这题只需要状态转移的时候记录路径。(实际上好抽象,想不明白,不过瞎调调出来了… …代码#include <bits/stdc++.h>using namespace std;struct node{ int L, R; char V;} opt[1010][1010];char s[1010];string v1[1010];s原创 2021-04-21 21:28:07 · 139 阅读 · 0 评论 -
uva10739经典动态规划
题目 给出一个字符串,长度小于一千。你可以执行三种操作:删除一个字符增加一个字符修改一个字符问,最少执行多少次操作可以使原字符串变成回文字符串。解题思路dp[i][j]dp[i][j]dp[i][j]表示将区间[i,j][i,j][i,j]修改成回文串的最小花费。由于dpdpdp的性质,当求dp[i][j]dp[i][j]dp[i][j]时,dp[i+1][j−1]dp[i+1][j-1]dp[i+1][j−1]、dp[i+1][j]dp[i+1][j]dp[i+1][j]、dp[i][原创 2021-04-20 20:22:35 · 361 阅读 · 0 评论 -
uva10617回文子序列数量动态规划
题目给定一个字符串(len<=60),求回文子序列数量解题思路区间DP,dp[i][j]表示区间[i,n]的回文子序列数量。初始化memset(dp, 0, sizeof dp);for (int i = 1; i <= n; i++) dp[i][i] = 1;for (int i = 1; i < n; i++) dp[i][i + 1] = (s[i] == s[i + 1] ? 3 : 2);状态转移:如果s[l]==s[r]s[l]==s[r]原创 2021-04-21 16:17:49 · 153 阅读 · 0 评论 -
环状区间DP
合并石子将经典的合并石子改成首位相连,即第一堆可以和最后一堆合并。只需要预处理一下,将1到n-1堆石子放到n后面,重新构造出线性序列即可。因为在环状序列中,最后的结果肯定是由最开始的某个[k,k+n-1]区间得到的。代码:(找不到题目,不知正确性如何)/* * @Author: hesorchen * @Date: 2020-12-30 16:53:18 * @LastEditTime: 2021-01-26 16:27:50 * @Description: 栽种绝处的花 */#inc原创 2021-01-26 16:29:41 · 254 阅读 · 0 评论 -
归并石子区间DP模板
题目链接 石子归并区间DP模板题。区间DP就是在区间上进行动态规划,通过合并小区间的最优解进而得出大区间上最优解的dp算法。#include <bits/stdc++.h>using namespace std;int dp[110][110];int a[110];int sum[110];int main(){ int n; cin >> n; for (int i = 1; i <= n; i++) cin &g原创 2021-01-21 21:14:17 · 1306 阅读 · 0 评论