洛谷 P3672 小清新簽到題 DP 排列

2022-04-06 19:58:04 字數 930 閱讀 7841

傳送門

題意:給定自然數n、k、x,你要求出第k小的長度為n的逆序對對數為x的1~n的排列

$n \le 300, k \le 10^13$

一下子想到hzc講過的dp

從小到大插入,後插入不會對前插入造成影響,$f[i][j]$表示$1..n$排列$j$個逆序對的方案數,列舉插在**

然後從前向後選擇滿足要求的字典序最小的構造就行了

一開始沒注意$dp$方程是$o(n^4)$的t了一次,以後一定要跑一下極限資料

加上字首和優化

然後會爆long long,但我們只關心與k相比大小,所以$>k$變成$k+1$就行了

#include #include 

#include

#include

#include

#include

using

namespace

std;

typedef

long

long

ll;const

int n=301, m=n*(n-1)/2

;inline ll read()

while(c>='

0'&&c<='9')

return x*f;

}int

n, x, m, a[n], vis[n];

ll f[n][m], k, s[

2][m];

void

dp()

}int

main()

cnt+= f[i-1][x-c];}}

for(int i=1; i<=n; i++) printf("

%d "

,a[i]);

//printf("\n%lf", (double)clock()/clocks_per_sec);

}

洛谷3672 小清新簽到題 題解

題目見上面。參考 講真我最開始真不知道求方案數有什麼用。f i j 表示i個數j個逆序對有多少種方案。顯然我們有f i j f i 1 j f i 1 j 1 f i 1 j i 1 就相當於給乙個比序列中所有數都大的數,讓你往裡插。於是令s i j 為字首和,優化成f i j s i 1 j s ...

洛谷 P3601 簽到題

題目描述 我們定義乙個函式 qiandao x 為小於等於x的數中與x不互質的數的個數。這題作為簽到題,給出l和r,要求求 i lrqi anda o i mo d666623333 sum r qiandao i mod 666623333 i lr qian dao i mo d666 6233...

洛谷P3601 簽到題

我們定義乙個函式 qiandao x 為小於等於x的數中與x不互質的數的個數。這題作為簽到題,給出l和r,要求求 sum r qiandao i mod 666623333 先線性篩出 1 sim 10 6 的質數,然後計算他們對 l sim r 的數的貢獻即可。注意噹噹 l sim r 的數最後可...