菜鸟的ACM之路(5)北大MOOC算法基础笔记__第六、七周__动态规划(下)例题实战

例题一 数字三角形POJ1163

 

1.i行第j个:

 

MAXi, j= maxMAXi + 1,  j), MAX(i + 1 j + 1)+ map[i][j]

 

2.k个:

 

MAX[k] = maxMAX[k]MAX[k + 1]+ map[i][j]

初始状态为最底层数字

 

例题二 最长上升子序列 百练2757

 

以第i, j个数字为终点,初始状态MAX[1]= 1

 

if(a[i] > a[j])

MAX[i]= maxMAX[i]MAX[j] + 1

 

例题三 公共子序列 POJ 1458

 

第一序列第i个,第二序列第j

 

if(len1[i] == len2[j])

       MAX(i, j) = MAX(i - 1, j - 1) + 1

else

MAXi j = maxMAXi - 1 j),MAXij - 1))

 

初始状态:MAX0, N= MAX(N, 0) = 0

 

例题四 最佳加法表达式

 

V(mn)表示在n个数字中插入m个加号所能形成的表达式最小值,那么:

 

ifm = 0

V(mn) = n个数字构成的整数

else if

n < m + 1

V(m, n) = INF

else

V(m, n) = min{V(m- 1, i) + Num(i + 1, n)}(i = m...n - 1)

 

Num(ij)表示从第i个数字到第j个数字所组成的数。数字编号从1开始算。

 

例题五 help Jimmy POJ 1661

 

首先将板子按高度排序,

初始条件,左右两端下面没有板子且高度小于MAX的板子距地高度

 

MINk = min(MIN(k左端) MIN(右端))

 

例题六 神奇的口袋 百练 2755

 

1.从前n种物品中挑选物品,V为剩余体积, 初始条件为pick(,0= 1

 

picknV=  pickn – 1, V – v[k]+ pick(n -1, V)

 

2.初始条件为:pick[0][] =1

 

for( V = 1; V <= 40; V++)

       for(n= 1; n <= N; n++)

       {

              pick[V][n]= pick[V][n - 1]

              if(V– v[n] >= 0)

                     pick[V][n]+= pick[V – v[n]][n - 1]

       }

 

例题七 0-1背包 POJ 3624

 

从前n种物品中挑选物品,V为剩余体积

初始条件为pick[1][V] = value[1]   (v[1] <=V) ,   pick[1][V] = 0 (v[1] > V)

 

pick[n][V] = maxpick[n- 1][V], pick[n - 1][V – v[n]] + value[n]

 

记忆化递归优化

 

例题八 滑雪 百练1088

 

从点(m, n)开始滑,初始条件,若周围没有点可以滑下,dp[m][n] = 1

 

否则:dp[m][n] = max(dp[m - 1][n], dp[m + 1][n],dp[m][n - 1] ,dp[m][n + 1]) + 1

 

例题九 分蛋糕

 

ways(w, h, m)表示宽为w、高为h的蛋糕,被切m刀后,最大的那块蛋糕的面积最小值题目就是要求ways(W, H, M - 1)

 

边界条件: w * h < m + 1  ==INF      m == 0  ==  w * h 

 

SV为第一刀竖着切时能得到的最好结果,SH为第一刀横着切时能得到的最好结果

ways(w, h, m) = min(SV, SH)

 

SV = min{Si, i = 1…w - 1}

 

其中 Si=为第一刀左边宽为i的情况下的最好结果。

 

Si=min{max(ways(i, h, k), ways(w - i, h, m –1 - k)), k = 0…m - 1}

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

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值