DP浅谈

D P DP DP浅谈

  • 由于窝太菜了,只好写这篇浅谈来聊以自慰。

那么我们从最简单的 D P DP DP入门开始吧

【一】基础 D P DP DP

( I )    l i s (I)\ \ lis (I)  lis一个最基础的 D P DP DP入门题。

  • 状态: f i f_i fi表示到 i i i l i s lis lis长度

  • 转移: f i = max ⁡   ( f j + 1 )    ( a j ≤ a i ) f_i=\max\ (f_j+1)\ \ (a_j\leq a_i) fi=max (fj+1)  (ajai)

  • 答案统计: max ⁡   f i \max \ f_i max fi

  • 因为我们在更新 i i i时要找到最大的 f j f_j fj来更新答案使得答案最优。这样的复杂度是   O ( n 2 ) \ O(n^2)  O(n2)

  • 但是我们可以在   O ( n log ⁡ n ) \ O(n \log n)  O(nlogn)的时间内完成,此时可以用树状数组来维护。这里来讲一下用树状数组来维护。此时只要利用简单的区间求最值以及区间加就能完成。

  • AT2827 LIS例题

  • 随便再来几道线性 D P DP DP

( 1 ) (1) (1) 例题一:CF711C
  • 这算是一道比较简单的 D P DP DP

    f i , j , k f_{i,j,k} fi,j,k表示表示前i颗树已经分成k组,第i颗树的颜色是j的情况花费的最小费用。

    转移也很简单(就是思考这个状态可以由哪些状态转移过来就行了)

    a i a_i ai确定的时候:

    f i , a i , k = m a x ( f i , a i , k , f i − 1 , j , k − 1 )    ( j ! = a [ i ] ) f_{i,a_i,k}=max(f_{i,a_i,k},f_{i-1,j,k-1})\ \ (j!=a[i]) fi,ai,k=max(fi,ai,k,fi1,j,k1)  (j!=a[i])

    f i , a i , k = m a x ( f i , a i , k , f i − 1 , j , k )    ( j = = a [ i ] ) f_{i,a_i,k}=max(f_{i,a_i,k},f_{i-1,j,k})\ \ (j==a[i]) fi,ai,k=max(fi,ai,k,fi1,j,k)  (j==a[i])

    a i a_i ai不确定的时候:

    f i , j , k = m a x ( f i , j , k , f i − 1 , h , k − 1 + w i , j )    ( j ! = h ) f_{i,j,k}=max(f_{i,j,k},f_{i-1,h,k-1}+w_{i,j})\ \ (j!=h) fi,j,k=max(fi,j,k,fi1,h,k<

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值