• DP题


    P1896互不侵犯(状压)

    dp前先将所有满足条件的状态一一求出来,节省时空间

    三维数组f[i][j][k]存第i行状态为k,目前共j个将军

    行与行之间状态可以通过左右移匹配来查看是否符合条件


    P4187[USACO18JAN]Stamp Painting G

    思维线性dp

    要用前缀和数组辅助递推

    先把所有的颜色排列个数求出来(m^n)

    再减去不符合条件的个数

    不符合条件的即为没有任何一个连续k个相同颜色的排列

    前k-1个数字不受影响

    当数组滚动到i时且i>k,至多有j~i这一段k-1个有相同颜色,i不能和j-1相同颜色,所以i只有m-1种可能

    所以用前缀和数组pre[i-1]-pre[i-k],(j~i-1)的和乘(m-1)得解

    P3205 [HNOI2010]合唱队(区间dp)

    常规方式,从小范围到大范围

    f[i][j][0]表示从最后一次加左边的可能性,f[i][j][1]表示从最后一次加右边的可能性

    f[i][j][0/1]从f[i][j-1][1/0]和f[i+1][j][0/1]变化过来

    P1792 [国家集训队]种树

    反悔贪心(dp思想)

    优先队列处理输入的数

    从大到小取,每取一个旁边的数标记不能拿。

    在录入(左边点权+右边点权−当前点权)的一个id相同,值不同的新数,防止取两边比取该点更优

    再用链表维护

    P1043 [NOIP2003 普及组] 数字游戏

    常规区间dp,用前缀和维护

    f[l][r][m]意思是该区间分为m部分的最大/小值

    递推时模拟断点i,l-i为m-1部分,i+1-r为1部分。

  • 相关阅读:
    455. Assign Cookies
    [leetcode]Linked List Cycle
    *[topcoder]GooseTattarrattatDiv1
    [topcoder]FoxAndChess
    *[topcoder]TheTree
    *[topcoder]LittleElephantAndBalls
    *[topcoder]HexagonalBoard
    *[topcoder]AstronomicalRecords
    *[topcoder]LittleElephantAndIntervalsDiv1
    [topcoder]IncrementAndDoubling
  • 原文地址:https://www.cnblogs.com/konnyaku-yy/p/15500856.html
Copyright © 2020-2023  润新知