51Nod1779 逆序對統計

2021-08-07 13:18:25 字數 951 閱讀 5509

lyk最近計畫按順序做n道題目,每道題目都分為很多分數檔次,lyk覺得這些題太簡單了,於是它想到了乙個好玩的遊戲。

lyk決定將每道題目做出其中的某個分數,使得這n道題目的逆序對個數最多。

為了方便,假設共有m個分數檔次,並且會給m個分數檔次分配乙個題目編號,表示該題目會出現這個分數檔次。

題目保證每道題都存在至少乙個分數檔次。(例如樣例中5道題目的分數分別是5,6,3,4,7,共有4個逆序對)

input

第一行兩個數n,m(n<=20,m<=100)。

接下來m行,每行乙個數ai,表示第ai道題目可能會有i這個分數的檔次。

output

乙個數表示最多逆序對個數。

input示例

5 7

1 2

3 4

1 2

5 output示例

4題解

問題可以對應為在m個分值中選擇n個,組成最大逆序對,然後就是裸題了。

**

#include

#include

#include

#include

#include

#include

#include

#include

#include

#include

#define mod 1000000007

#define ll long long

#define inf 1e9

using

namespace

std;

inline

int read()

while(ch>='0'&&ch<='9')

return x*f;

}int n,m,dp[1

<<20];

int main()

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對逆序數 一開始感覺...

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

按照插入數的大小排序,然後依次進行dp。用乙個狀態表示n個數是否被選了 10110 就是表示第1 3 4個位置都選了 那麼如果此時這個數該填到5這個位置,那麼必定會造成乙個逆序 因為下乙個數會填到2,下乙個數必定比這個數大 也就是轉移的時候看插入位置前有多少個0,進行轉移 寫的時候有一些小技巧 直接...