小白dp总结

根据目前我所做的几个dp题的小总结
背包问题经过简化过就先不参与比较 背包总结

一下仅个人理解:
根据所求的不同dp数组代表不同含义
dp主要是填表的过程------>用前面求出来的更新后面的并取最优
----->填表的顺序 由后面需要用到前面求出的值有关
(假设前面已经是最优值,当前要对dp[i-1]或dp[i+1]进行怎样的操作)

冰水挑战 ---->最大活动数量 dp[i][j]表示前i个活动参加了j个的体力活动数量 dp[n][j]
建商店----->最少花费 dp[i][j]表示前i在当前建dp[i][1]或不建dp[i][0]的花费
矩阵连乘----->最少乘次 dp[i][j]表示从i到j乘次
数字三角----->最少经过数字和 dp[i][j]表示从坐标(i,j)到终点经过的数字和

填表(把表填满)
------------把表填好后选用不同的点判断取最优

i教室建或不建      取最优 花费      dp[i][0] dp[i][1]
i活动选或不选      取最优 活动数j   dp[i][j]
(i,j)之间在哪分割  取最优 乘积      dp[i][j]
------------根据下一次可能用到的判断循环顺序

//建商店

for(i=1;i<=n;i++)//当前循环
{
    dp[i][1]=min(dp[i-1][0],dp[i-1][1])+a[i].c;
    for(j=1;j<i;j++)//比较之前的更新选最优
    {
        //更新的条件
        dp[i][0]=min(dp[i][0],dp[j][1]+disum[j][i]);
    }
}

//最长上升子序列


for(i=1;i<=n;i++)//当前循环
{
	dp[i]=1;
    for(j=1;j<i;j++)//比较之前的更新选最优
    {
        //更新条件
        if(a[j]<a[i])
        {
            dp[i]=max(dp[i],dp[j]+1);
        }
    }
}
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值