ACM-区间dp
Nicetomeetu-
没有
展开
-
ZOJ - 3735 Cake(凸包,区间dp,最优三角剖分)
对着kuangbin博客开始刷区间dp! 按照题目的要求先用Graham扫描法求出凸包,如果凸包上点的数目正好等于输入点的数目,也就说明输入的点恰好构成凸包,否则输出“I can't cut.”。 求出凸包后,注意到这是一个环,所以只要把环剪开,就可以用区间dp做了。 定义状态dp[i][j]表示i到j这段区间内最优三角剖分的代价,注意此时i和j之间已经有边了。 所以状态转移方程为:dp[原创 2017-07-06 18:20:48 · 442 阅读 · 0 评论 -
POJ 3280 区间dp
用dp(i, j)表示区间[i, j]变成回文字符串需要的最小代价 如果s[i] == s[j] 则dp(i, j) = dp(i + 1, j - 1) 否则我们就有四种决策消除i, j这两个位置的冲突 1.在左边添加一个s[j]字符 2.删除s[j] 3.在右边添加一个s[i]字符 4.删除s[i] 我们用add(i)表示添加第i个字符的代价, dele(i)表示删除第i个字符原创 2017-03-14 00:24:06 · 277 阅读 · 0 评论 -
POJ - 2955 Brackets (区间dp)
题目链接:Brackets 定义状态dp[i][j]表示i到j这段区间内最长括号序列的长度。 根据题目信息,最长括号长度有两种方式得到。 1、如果s[i]和s[j]匹配的话,dp[i][j] = max(dp[i][j], dp[i + 1][j - 1] + 2) 2、否则枚举中点k,[i, j]内的最长括号序列是由[i, k]和[k + 1, j]拼接而成,dp[i][j] = max原创 2017-07-06 20:09:13 · 276 阅读 · 0 评论 -
POJ - 1651 Multiplication Puzzle (区间dp)
题目链接:Multiplication Puzzle 定义状态dp[i][j]表示将区间[i, j]全部取完所需要的最小代价,答案就是dp[1][n - 2]。 状态转移方程为:dp[i][j] = min(dp[i][k - 1] + dp[k + 1][j] + a[i - 1] * a[k] * a[j + 1]) (i 代码如下: #include #include #inc原创 2017-07-07 14:23:05 · 328 阅读 · 0 评论 -
SPOJ GCJ1C09C (区间dp)
对监狱区间dp,也很好理解,不再赘述。#include #include #include #include #include #include using namespace std; const int INF = 0x3f3f3f3f; const int maxn = 10005; int a[maxn]; int P, Q; struct State{ int原创 2016-11-29 22:01:27 · 399 阅读 · 0 评论 -
Light OJ - 1422 Halloween Costumes (区间dp)
思路很精巧的一道题目,看了大牛的博客猛然惊醒。 我的脑回路仿佛天生和有些题目冲突,不管怎么思考都想不到那个重要的点上去。有时候感觉自己这个方向是对的,就是还差了一点点想不出来而已,但是看了题解之后往往会发现真正的解和我所想相差甚远,基本不在一个次元。在多次的实验中,我发现我的每一次思考都在被上一次影响着,换句话说我见到这道题目的第一印象基本决定了我在这道题上能走多远。虽然总是在努力的思考着,但是原创 2017-07-08 10:53:13 · 365 阅读 · 0 评论