区间dp
mengsz1
我爱学习
展开
-
石子合并——圆形版
石子合并的圆形版和直线版差不多,关键是怎么把圆变成直线来处理。 以最小值为例: 1.先初始化mi[m][m]; 2.枚举区间长度len,当区间长度为1时,相应的mi[len][i] = 0; 3.枚举起始位置i; 4.枚举插入位置,mi[j][i]代表从i开始,长度为j的最小得分。 5.将圆变成直线的方法是,当i+j大于n时,第二段开始的位置就要重新计算, 设pos为第二段开始的坐标...原创 2018-08-09 22:52:59 · 642 阅读 · 0 评论 -
Brackets
1.dp[i][j]表示从i到j匹配的括号的最大数量。 2.转移方程dp[i][j] = max(dp[i][j],dp[i+1][k-1]+dp[k+1][j]+2); 表示当第k个括号和第i个括号匹配时,即ss[i] == ss[k] 括号数量为第i+1~k-1的括号数量和第k+1~j的括号数量+2#include<iostream>#include<cs...原创 2018-08-10 08:44:14 · 731 阅读 · 0 评论 -
Halloween Costumes 区间dp
1.初始化为最坏情况,即区间多长,就用多少件衣服。 2.i是用来枚举起始位置,j枚举终点位置,k代表分割区间的位置。 3.如果从第计算dp[i][j]时,如果第i+1~j中没有一件衣服和第i天一样, dp[i][j] = dp[i+1][j]+1; 如果有a[i] == a[k] dp[i][j] = min(dp[i][j],dp[i+1][k-1]+dp[k][j]) 代表第i...翻译 2018-08-09 23:35:17 · 113 阅读 · 0 评论 -
石子合并问题——直线
撒大声地原创 2018-08-09 22:02:55 · 1534 阅读 · 0 评论