NOI 2015 壽司晚宴(狀態壓縮動態規劃)

2021-08-25 14:49:18 字數 3813 閱讀 5200

link

【noi 2015】壽司晚宴

description

求滿足以下條件的集合 a,

b a,b

對數:資料範圍 n≤

500 n

≤500

。solution

這題看似很難處理。這時我們就需要觀察題目的特殊性質。考慮對於

≤500‾‾

‾‾√ ≤

500的素因子和

>

500‾‾‾

‾√>

500的素因子分別計算。發現

≤500‾‾

‾‾√ ≤

500的素因子只有

8 8

個,分別是 2,

3,5,

7,11,

13,17,

19' role="presentation" style="position: relative;">2,3

,5,7

,11,13

,17,19

2,3,

5,7,

11,13,

17,19。對於所有 2≤

n≤500 2≤n

≤500

,n n

都可以被分解成 n=

2x1×

3x2×

⋯×19x

8×p' role="presentation" style="position: relative;">n=2

x1×3

x2×⋯

×19x8

×pn=

2x1×

3x2×

⋯×19x

8×p。其中

p p

為 1' role="presentation" style="position: relative;">1

1或素數。注意到不可能出現 p2

p

2的情況。考慮對於每個不同的

p p

計算它會被分到那個集合中。設 f

[mas

ka][

mask

b]' role="presentation" style="position: relative;">f[m

aska

][ma

skb]

f[ma

ska]

[mas

kb]表示

≤500‾‾

‾‾√ ≤

500的素因子在

a a

集合的出現狀態為 ma

ska' role="presentation" style="position: relative;">mas

kama

ska,在

b b

集合中的出現狀態為 ma

skb' role="presentation" style="position: relative;">mas

kbma

skb的方案數。對於每個不同的

p p

分別計算。g[

a or 

b][m

aska

][ma

skb]

' role="presentation" style="position: relative;">g[a

orb][

mask

a][m

askb

]g[a

orb][

mask

a][m

askb

]表示

p p

被分給

a' role="presentation" style="position: relative;">a

a集合或

b b

集合,≤500

' role="presentation" style="position: relative;">≤

500‾‾‾

‾√≤500

的素因子在

a a

集合的出現狀態為 ma

ska' role="presentation" style="position: relative;">mas

kama

ska,在

b b

集合中的出現狀態為 ma

skb' role="presentation" style="position: relative;">mas

kbma

skb的方案數。

計算出

g g

後,再用它更新

f' role="presentation" style="position: relative;">ff。

f[ma

ska]

[mas

kb]=

g[a]

[mas

ka][

mask

b]+g

[b][

mask

a][m

askb

]−f[

mask

a][m

askb

] f[m

aska

][ma

skb]

=g[a

][ma

ska]

[mas

kb]+

g[b]

[mas

ka][

mask

b]−f

[mas

ka][

mask

b]

。要減去 f[

mask

a][m

askb

] f[m

aska

][ma

skb]

是因為兩個集合都不選

p p

的情形被計算了兩次。時間複雜度: θ(

n×22

⋅primecount(n

))' role="presentation">θ(n

×22⋅

primecount(n

√))θ

(n×2

2⋅primecount(n

))code

#include 

#include

using

namespace

std;

const

int maxn = 505;

const

int maxs = 305;

const

int prime = ;

int n;

long

long m, f[maxs][maxs], g[2][maxs][maxs];

struct number

} a[maxn];

void upd(long

long &a, long

long b)

int main() }}

a[i].left = temp;

}sort(a + 2, a + n + 1);

f[0][0] = 1;

for (int k = 2; k <= n; k++) }}

for (int i = 255; i >= 0; i--)

}if (k == n || a[k].left == 1 || a[k].left != a[k + 1].left) }}

}long

long ans = 0;

for (int i = 0; i < 256; i++) }}

printf("%lld\n", ans % m);

return

0;}

NOI 2015 壽司晚宴

description 為了慶祝 noi 的成功開幕,主辦方為大家準備了一場壽司晚宴。小 g 和小 w 作為參加 noi 的選手,也被邀請參加了壽司晚宴。在晚宴上,主辦方為大家提供了 n 1 種不同的壽司,編號 1,2,3,n 1,其中第 i 種壽司的美味度為 i 1 即壽司的美味度為從 2 到 n...

NOI 2015 壽司晚宴

4197 noi2015 壽司晚宴 time limit 10 sec memory limit 512 mb submit 813 solved 508 submit status discuss description 為了慶祝 noi 的成功開幕,主辦方為大家準備了一場壽司晚宴。小 g 和小 ...

NOI2015 壽司晚宴

題目 這是一篇需要龜速乘的思博題解 我們考慮一下 n leq 30 的睿智暴力,顯然質因數個數少得一批,互質的條件又等價於沒有公共的質因子,所以我們直接狀壓質因子,dp i s 1 s 2 表示前 i 個數考慮完了,第乙個人選擇的質因子狀態為 s 1 第二個人選擇的質因子狀態為 s 2 轉移的話就考...