數學公式:http://blog.csdn.net/lanxuezaipiao/article/details/44341645
下面的這些問題我都沒打過,只有想過思路,可能會有錯。
P1325 雷達安裝
https://www.luogu.org/problemnew/show/1325
若豎直距離超過半徑直接輸出-1。
預處理:以P爲圓心,做半徑爲r的圓,交x軸於
那麼這一題就轉化爲線段覆蓋問題了。對線段右端點進行排序,然後從右往左選取。
P3146 [USACO16OPEN]248
https://www.luogu.org/problemnew/show/3146
給定一個1*n的地圖,在裏面玩2048,每次可以合併相鄰兩個(數值範圍1-40),問最大能合出多少。注意合併後的數值並非加倍而是+1,例如2與2合併後的數值爲3。
我想到的:每一個聯通塊(大小大於1,假設爲n,數值爲i)合併後結果就是二進制下的1的個數個,其中最大的爲i+最高二進制位對應的冪。
比如:
x-=x&(-x)
每次取lowbit,就可以得到這個聯通塊合併出的結果了。
那麼貪心的策略就是每次對最小的非1聯通塊進行處理,記錄並更新最值(取個max),兩端如果存在x可以再次合併,就將其移動到x旁邊。
但是實現起來好像不太容易,而且感覺並不是最優的…
看下題解發現是道DP題…那就重定向到DP專欄吧
http://blog.csdn.net/uiqrm/article/details/78313830
考慮用區間DP來解決。設dp[i][j]表示區間i j所能獲得的最大值。