P3226 HNOI2012 集合選數 狀壓DP

2021-10-10 02:32:04 字數 1235 閱讀 6452

題面

我們發現每個數 n

nn 是否被選,只與 n3,

n2,2

n,3n

\frac,\frac,2n,3n

3n​,2n

​,2n

,3n 有關,那麼我們考慮建一張表,表上每一行按照 ×

3\times 3

×3的方式遞增,每一列按照 ×

2\times 2

×2的方式遞增,那麼對於同一張表,任意上下左右相鄰的數都是不能選的,那麼這樣的表一共有 n−n

2−n3

+n2×

3n-\frac-\frac+\frac

n−2n​−

3n​+

2×3n

​ 種,每一張表的轉移是 log⁡2

n×22

×log⁡3

n\log_2 n\times 2^

log2​n

×22×

log3​n

雖然理論複雜度達到了 5e10

5e10

5e10

但是實際跑下來十分優秀,可能因為後來的表變的極小,轉移的複雜度大幅降低

#include

using

namespace std;

namespace zzc

while

(isdigit

(ch)

)return x*f;

}const

int maxn =

1e5+5;

const

int maxm =

5005

;const

int mod =

1e9+1;

int n,r,sta[maxm]

,num[20]

,f[20

][maxm]

;long

long ans=

1,sum;

bool vis[maxn]

;void

update

(int x)}}

for(

int i=

0;i<(1

<);i++

) sum=

(sum+f[r-1]

[i])

%mod;

ans=ans*sum%mod;

}void

work()

}int

main()

洛谷 3226 HNOI2012 集合選數

哇很好很好的 dp 題目 yyr 講了這道題之後我瞬間就忘記啦,所以只能自己想了 大概思路還是記得噠 很明顯這題就是不能讓你去暴力列舉的,階乘級別的複雜度啊 但是怎麼去 dp 呢,單純的根據題意去嘗試定義 dp 方程似乎並不是很容易定義,這個時候需要嘗試構造模型 選了乙個元素就不能選另乙個元素或者另...

HNOI2012 集合選數

這是題目 大概就是讓你找方案數嘛。開始我還以為是一道規律題,然後有愉快地打了乙個暴搜打表。找了十分鐘沒找出來。www.oeis.org。結果.這是表 半點規律沒有。然後想了想dp,想不出線性或帶log的。最後實在做不出來了,於是問了個大犇。大犇說這道題要用矩形。尼瑪沒在逗我。把題目意思轉換一下嘛。就...

題解 HNOI2012 集合選數

題目傳送門 直接看題面吧。感覺挺水的一道題啊?怎麼評到紫色的啊?考試的時候ljs出了這個題的加強版我就只想出這個思路,然後就爆了。不難發現,我們可以構造矩陣 x 2x 4x 6x 3x 6x 12x 24x 48x 9x 18x 36x 然後實際上就相當於在這個矩陣中選出一些數使得兩兩不相鄰。因為行...