1. 程式人生 > >2018年11月30日普級組 解題報告

2018年11月30日普級組 解題報告

首先第一題是個很明顯的水題切掉了,第二題發現都是1,於是就輸出了1,竟然有50!第三題打了貪心40,總分190

T1 婚禮上的小杉

排序題,略掉吧。。。 話說我是本題唯一一個O(n)O(n)過的

T2 玩詐欺的小杉

給定變化規則,求最終矩陣 這是經典搜尋題的變例,操作的方式是影響到前後兩行,前後一列,由於經典的方法——列舉第一行的狀態會導致解法不唯一(不能確定其他行的狀態),於是我們考慮列舉第一列的狀態。

列舉第一列的操作狀態以後,根據前一列的操作與目標棋盤該列的狀態確定下一列的操作(這裡我們必須使用位運算,否則面對20×2020\times 20的資料肯定超時),最後確定最後一列操作後的狀態是否符合目標,若符合則為一個解法。這裡有一個小技巧,不斷推出每一列的操作狀態,若第M

+1M+1列(實際不存在該列)的操作為不進行任何操作,那麼這確定為一個解法 程式碼略

T3 拼拼圖的小杉

dpdp練習題 由於拼圖放進集合必須是有順序的,於是這個問題滿足了無後效性,這告訴了我們應該要DP,至於怎麼DP,其實有很多方式,下面是我的一種方式。

令c[i,j]=(a,b)表示前i個拼圖選出j個最少要用a+1個集合,最後一個集合已經放了b個拼圖塊才能放得下。

c[i,j]=min{c[i1,j],c[i1,j1]+a[i]}c[i,j]=min\{c[i-1,j],c[i-1,j-1]+a[i]\}

]} 其中 c[i1,j1]+a[i]=(c[i1,j1].a,c[i1,j1].b+a[i])c[i-1,j-1]+a[i]=(c[i-1,j-1].a , c[i-1,j-1].b+a[i])(c[i1,j1].b+a[i]<=T)(c[i-1,j-1].b+a[i]<=T)

否則(c[i1,j1].a+1,a[i])(c[i-1,j-1].a+1 , a[i])

a[i])(c[i1,j1].b+a[i]>T)(c[i-1,j-1].b+a[i]> T) 最後Ans=max{ic[n,i]<M}Ans=max\{i|c[n,i]<M\}

O(n2)O(n^2)

T4 想越獄的小杉

也就是對每個點,找一條原點出發的路徑,使其最小邊最大。

用類似最短路的演算法,只在判斷更優的時候稍微改變判定方式,就能得到解。

O(n2)O(n^2)