2019/04/10学习记录总结--区间dp

近期感触

突然发现了dp与选择算法在结构上的类似
这周主要看题主要还是dp区间

区间dp`

区间DP是把一个大区间拆分成几个小区间,
先求小区间的最优值,然后合并起来求大区间的最优值。
然后一般问题的最优解会集中在dp[1][n]的位置;

规定dp[i][j]为合并第i堆到第j堆的最小花费 
DP方程为:
dp[i][j] = min(dp[i][k] + dp[k+1][j]) + sum[j] - sum[i-1] (i <= k < j) 
常见区间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操作处理时对二维数组的成员理解上拿捏上会想很长时间 总感觉定义完后数组中间有一部分是空着的 就像开始时接触基础dp[i][j]二维数组的引用定义难以理解 近期多锻炼一下这种思想


The 7th day after the last setback.

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值