普及組的題.....填坑來了。
當年的我一眼二分+dp,現在都佩服起自己來了......
然後我們就寫個二分,在check裡面寫單調佇列優化dp即可。
然後就a了......
1 #include 2 #include 3 #include 4ac**5 typedef long
long
ll;6
const
int n = 500010;7
const ll inf = (1ll << 61);8
9int
n, x[n];
10ll v[n], k;
1112
intp[n], head, top;
13ll f[n];
1415 inline bool check(int l, int
r) 29 pos_in++;30}
31while(head <= top && x[i] - x[p[head]] >r)
3435
if(head <=top)
3839 ans =std::max(ans, f[i]);40}
41return ans >=k;42}
4344
intmain()
52if(sum
5657
int l = 0, r = std::max(x[n] -d, d), mid;
58while(l
63else66}
6768 printf("%d"
, r);
69return0;
70 }
洛谷P3957 跳房子
普及組的題。我不會。題目 思路很簡單,就是二分答案 dp 單調佇列 線段樹也可以 但是要注意細節,乙個細節錯了,一半分數就沒了。引用洛谷上某大佬的一段話 發現答案的可行區間是單調的,所以二分答案,容易推出f i 表示到達第i個格仔的最大值,列舉上一步跳了多少來轉移 然後仔細觀察可以發現對於乙個狀態,...
洛谷P3957 跳房子
跳房子,也叫跳飛機,是一種世界性的兒童遊戲,也是中國民間傳統的體育遊戲之一。跳房子的遊戲規則如下 在地面上確定乙個起點,然後在起點右側畫 n 個格仔,這些格仔都在同一條直線上。每個格仔內有乙個數字 整數 表示到達這個 格仔能得到的分數。玩家第一次從起點開始向右跳,跳到起點右側的乙個格仔內。第二次再從...
題解 P3957 跳房子
題目鏈結 題目大意 給定 n 個格仔離原點距離以及權值,初始單次移動距離只能為 d 你可以花費 g 枚金幣使得單次移動距離變為 max d g,1 d g 內任意整數,問獲得權值至少為 k 最少需要花費多少枚金幣 單調佇列 分析 顯而易見答案具有單調性,因為花費金幣越多機械人越靈活,花費金幣少的可行...