20190809B組

20190809B組

T1:100(100)

賽時:

看完這套題就知道是一個系列的題。

不管這麼多,第一題很快看出是揹包。

並且數據一點都不大,輕鬆過掉。

算法:

揹包

T2:12.5(0)

賽時:

看看數據很小,但題目有點難以用比較快速的算法完成。

爲了控制時間,只好打個暴力。

其中有一個重要的剪枝沒打,導致37.5->12.5。

賽後:

由於這道題的 T 很大,線性算法是過不了的,所以我們考慮矩陣乘法。

這道題圖中的邊權爲 1~9,比較小,所以考慮拆點,爲了方便表示,把編號爲 i 的點拆爲 i*10+1~i*10+9 一共 9 個節點。

如果 i 到 j 有一條權值爲 k 的路徑,那 麼就把矩陣中[i*10+k,j*10+1]的值設爲 1,相當於先從 i*10+1→i*10+k 走過 k-1 條長度爲 1 的路徑,再在 i*10+k→j*10+1 走過 1 條長度爲 1 的路徑,總長度爲 k,跑一遍快速冪,[1*10+1][n*10+1]的值即是方案總數。

算法:

矩陣乘法&快速冪

T3:30(0)

賽時:

看到題目很像找規律,可是找了很久沒推出。

只好放棄大暴力,可是這幾題奇怪的沒有部分分。

這樣做有爆零的危險,估分也難。

賽後:

仔細分析數字的對應關係,可以發現這 N 個數會組成很多個環。

設有 K 個環, 每 個 環 的 長 度 爲 l[i] , 明 顯 的 , 他 們 最 終 還 原 爲 原 序 列 的 排 數 爲 LCM(l[1],l[2],l[3],...,l[k])。

設這個排數爲 A,不妨把 A 分解質因數,令 A=p1^c1*p1^c2*...*pm^cm. 我們就會得出一個結論:p1^c1+p2^c2+..+pm^pmn,怎麼都 不會達成。

所以,我們就用一個簡單的 dp,f[i][j]表示前 i 個質數,總和爲 j 的 方案數, 那麼 f[i][j]=∑f[i-1][j-pri[i]^k],先把 n 以內的質數篩出來,再求一遍 dp,答案 就是∑f[質數總數][i]。

算法:

dp

T4:30(0)

賽時:

又好像是一道dp題,可是不管怎麼推也推不出。

 於是有隻好打一個暴力。

本是dp專場的,被我硬生生的變成暴力專場。

賽後:

設 ans(n)爲 0~n 中 windy 數的個數,求 A~B 以內的 windy 數個數,也就是求 ans(B)-ans(A-1),但是 A 和 B 很大,直接枚舉會超時,怎麼辦?

仔細分析會發 現一個數是不是 windy 數,只跟它數位上的數有關,所以不妨設 f[i][j]表示第 i 位填 j 的 windy 數個數(第一位是個位)。

轉移很明顯: F[i][j]= ∑[abs(j-k)>=2]f[i-1][k]。 我們設 num[i]爲 n 第 i 位的數(從高位到低位), 對於位數比 n 的位數小的 i 或第一個數字比 num[1]小的 j,ans+=f[i][j]; 對於位數等於 n 的位數的我們枚舉前 k 位與 n 相等(要確保合法),再把比當前位數的數小的 j 的 f[i][j]加到答案裏。

算法:

數位dp

 

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章