洛谷P3957 跳房子

2022-04-30 13:36:10 字數 864 閱讀 8401

普及組的題.....填坑來了。

當年的我一眼二分+dp,現在都佩服起自己來了......

然後我們就寫個二分,在check裡面寫單調佇列優化dp即可。

然後就a了......

1 #include 2 #include 3 #include 4

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 }

ac**

洛谷P3957 跳房子

普及組的題。我不會。題目 思路很簡單,就是二分答案 dp 單調佇列 線段樹也可以 但是要注意細節,乙個細節錯了,一半分數就沒了。引用洛谷上某大佬的一段話 發現答案的可行區間是單調的,所以二分答案,容易推出f i 表示到達第i個格仔的最大值,列舉上一步跳了多少來轉移 然後仔細觀察可以發現對於乙個狀態,...

洛谷P3957 跳房子

跳房子,也叫跳飛機,是一種世界性的兒童遊戲,也是中國民間傳統的體育遊戲之一。跳房子的遊戲規則如下 在地面上確定乙個起點,然後在起點右側畫 n 個格仔,這些格仔都在同一條直線上。每個格仔內有乙個數字 整數 表示到達這個 格仔能得到的分數。玩家第一次從起點開始向右跳,跳到起點右側的乙個格仔內。第二次再從...

題解 P3957 跳房子

題目鏈結 題目大意 給定 n 個格仔離原點距離以及權值,初始單次移動距離只能為 d 你可以花費 g 枚金幣使得單次移動距離變為 max d g,1 d g 內任意整數,問獲得權值至少為 k 最少需要花費多少枚金幣 單調佇列 分析 顯而易見答案具有單調性,因為花費金幣越多機械人越靈活,花費金幣少的可行...