今天的主题就是这个啦(感谢我亲爱的学校,让我能翘晚自习搞信息)。
区间dp就是在一个很窄很窄的矩阵里面(线性结构)(我写的都是我自己的理解,语言毫无规范可言)进行的操作,将它按特定要求分割开来,然后不同地方分割会有不同的收益,而我们的目标是让这个收益值最大(通常,话不能说太满)。
先上个模板(我用的是c++)
vector<vector<int>> dp(n, (n, 0));
// 定义+初始化(用vector是因为初始化方便,它跟数组没太大区别)
int j; // 后面要用
for(int L=2; L<=n; L++) // 枚举长度
for(int i=0; i-L+1<n; i++) // 枚举起点
{
j=i+L-1; // 算出终点
for(int k=i+1; k<j; k++) // 寻找最优分割点
dp[i][j]=max(dp[i][j], dp[i][k]+dp[k+1][j]+???);
// 找最大???的情况
}
开始做题(我的题可能不是经典的,但都是我觉得有质量的)
下一篇推题目+题解