这周一老师讲了区间DP,区间DP主要是把一个大区间拆分成几个小区间,先求小区间的最优值,然后合并起来求大区间的最优值。 一般区间DP实现代码 memset(dp, 0x3f, sizeof(dp)); for (int i = 1; i <= n; i++) //区间长度为1的初始化 dp[i][i] = 0; for (int len = 2; len <= n; len++) //枚举区间长度 { for (int i = 1, j = len; j <= n; i++, j++) //区间[i,j] { //DP方程实现 } } 区间DP还是老套路,区间dp的大致思路就是 首先确定状态 初始化长度为1(or 2,3....具体因题而异)的dp数组的值 然后枚举区间长度,枚举区间的起始点,(有的题目还需要枚举断点) 由小区间转移到大区间。 最后dp[1][n]往往就是答案。 个人感觉,想要快点掌握一项算法,函数什么的用法,可以先掌握大体意思,然后迅速去找一些题做,当然刚开始肯定是没有思路,那就去网上搜题解,仔仔细细的研究几道,吃透里面各个步骤的意义。几道题过后就差不多知道这个算法,这个函数到底是也么用,如何在程序里用,怎么个用法,然后在尝试去做几道题,这样差不多就开始有了思路,会越做越顺。