一些史前dp

dp态 所存的值一定是局部最优解 

多维dp 初始化和维度是对应的



1、   :背包

状态分析:(1)每个物品都有装和不装两个选择  (2)每个物品也都可以在任何时候装    

用传统枚举的思想,把所有能装的时候都做装和不装的选择。

   f[当前体积]     存    最大价值;

注:因物品没有先后装的顺序,所以无后效性。



2、   :最长子序列

状态分析:(1)每一个点都可以跟一个比他 大/小 的后面的数 (2)后面的数能跟的数也要知道

∴必须倒序;     用传统枚举的思想,倒序每个数都向后找。

   f[数的位置]     存    最长的长度

注:因每个数都匹配过,所以无后效性。



3、    :合并石子(有环)

状态分析:(1)有环只能枚举端点 (⊙﹏⊙)b    (2)每两堆石子都可以归并,枚举是必然了;   (3)想知 1、2、3的结果 必须知道 1、2 ;2、3;  想知1、2、3、4的结果必须知道1、2;2、3;3、4;1、2、3;2、3、4; 而1、2,;2、3;1、2、3都已知道    所以只需知道 2、3、4;3、4;   所以就会了;

   f[起始位置][终点位置]  存  最大分;

注:因新数的加入不影响前面的值,所以无后效。



4、   :敲砖块

状态分析:(1)敲一个转上面两块必须敲;    (2)可以划分出不相关,无后效性的段;       (3)因为f[i][j]只能在f[i-1][j]和f[i-1][j+1]之后敲,所以和左边的无关;

(4)于是想到从右往左取敲每一块,敲k次的最优值;

  f[层数][列数][一共敲几块]  存  最大分;

注:关键在于判断不关联的部分,即断点。


5、 :二进制

状态分析:其实对于数字来说,每一位都是相对独立的,在加减运算中,唯一影响到的只有进位标记。        ps:其实做这题的时候忽略了数字相加的特性:从个位开始,每个位都要等于两个加数的和。

于是分析(1) 一个数字中出现的1的个数影响后面的决策(有1的个数的要求);       (2)后效性分析:如果不进位,前几位相加都不相等,后几位无论如何也加不等了;前几位不是最小,最高位相当的情况下,总数不可能是最小了,而前几位的大小,对高位本身不构成影响。

(3)相等情况分析:对于用1个数、进位相同的情况,只需取一个最小值,这实际上也是在用加法运算的独立性。(4)由于每一串数字的1的个数都对后面答案有影响,所以再建立3维。

f[长度][第一个数几个1][第二个数几个1][第三个数几个1][进位]   存  当前长度,各个数位1的情况下的最小值 ;

注:后面位数的结果不影响前面位数的结果,所以无后效性。


















  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值