51nod 1779逆序對統計(狀壓DP)

2022-08-31 03:51:11 字數 559 閱讀 9620

按照插入數的大小排序,

然後依次進行dp。

用乙個狀態表示n個數是否被選了

10110 就是表示第1、3、4個位置都選了

那麼如果此時這個數該填到5這個位置,那麼必定會造成乙個逆序(因為下乙個數會填到2,下乙個數必定比這個數大)

也就是轉移的時候看插入位置前有多少個0,進行轉移

寫的時候有一些小技巧

(直接用記憶化統計0的個數超時了,這裡有乙個遞推的技巧)

#include #include 

#include

using

namespace

std;

int dp[2][(1

<<20)+1], f[(1

<<20)+1

];int n, m, a[111

];int

main()

}memset(dp[(i-1)&1], 128, sizeof(dp[(i-1)&1

]));

}cout

<1][(1

<1]

}

51Nod1779 逆序對統計

lyk最近計畫按順序做n道題目,每道題目都分為很多分數檔次,lyk覺得這些題太簡單了,於是它想到了乙個好玩的遊戲。lyk決定將每道題目做出其中的某個分數,使得這n道題目的逆序對個數最多。為了方便,假設共有m個分數檔次,並且會給m個分數檔次分配乙個題目編號,表示該題目會出現這個分數檔次。題目保證每道題...

51NOD1779 逆序對統計

lyk最近計畫按順序做n道題目,每道題目都分為很多分數檔次,lyk覺得這些題太簡單了,於是它想到了乙個好玩的遊戲。lyk決定將每道題目做出其中的某個分數,使得這n道題目的逆序對個數最多。為了方便,假設共有m個分數檔次,並且會給m個分數檔次分配乙個題目編號,表示該題目會出現這個分數檔次。題目保證每道題...

51nod 1779 逆序對統計 狀壓dp

n範圍小,可以狀壓 0 1表示是否已經給這道題選擇了分數 按分數的順序列舉 在某乙個狀態中,若給第i道題選擇這個分數那麼產生的貢獻就是狀態中第i位後的1的個數 如 狀態為 10101,已經選好了1,3,5的分數,此時選擇規定第2題的分數,貢獻就是第2位之後1的個數為2 則會產生2對逆序數 一開始感覺...