一位著名的CF玩家曾經(jīng)說過,不要用Java做CF。
不然就是這樣:用ArrayList的代碼,用Vector的代碼。
快速版題解:
A、B、C水題,D樹形dp。手速場無誤。
A
題意:就是有n個(gè)城市,你要從a點(diǎn)到b點(diǎn)。然后0表示沒有機(jī)場,1表示有機(jī)場。問你要轉(zhuǎn)多少飛機(jī)。
思路:神特么水題。。。
代碼:384A
B
題意:樣例很清楚了
思路:因?yàn)槭菍ΨQ的,如果在右邊就對稱回來,再求解子問題
代碼:384B
C
題意:題意很清楚給你一個(gè)n,要你把2/n拆成1/x+1/y+1/z,如果拆不了輸出-1。
思路:1/n=1/(n+1)+1/(n*(n+1))
代碼:384C
D
題意:給你一個(gè)有根樹,讓你選兩個(gè)節(jié)點(diǎn),要求這兩個(gè)節(jié)點(diǎn)下面的子樹不相交。問,最大權(quán)值。
思路:
- 樹形dp。dp[x][0]表示整個(gè)以x為根的子樹的全部和;dp[x][1]表示以x為根的子樹按題目要求再選一次,能拿到的結(jié)果;dp[x][2]表示從x為根的子樹里面任選一個(gè)節(jié)點(diǎn)時(shí)能拿到的最大值。
- 所以dp[x][0]=sum(dp[next][0]);
dp[x][2]=max(dp[x][0], dp[nexti][0]);
dp[x][1]=max(dp[nextk][1], max(dp[nexti][2]+dp[nextj][2]))
代碼:384D