洛谷 3957 跳房子

2022-04-29 20:12:08 字數 2118 閱讀 1741

跳房子,也叫跳飛機,是一種世界性的兒童遊戲,也是中國民間傳統的體育遊戲之一。

跳房子的遊戲規則如下:

在地面上確定乙個起點,然後在起點右側畫 nnn 個格仔,這些格仔都在同一條直線上。每個格仔內有乙個數字(整數),表示到達這個 格仔能得到的分數。玩家第一次從起點開始向右跳,跳到起點右側的乙個格仔內。第二次再從當前位置繼續向右跳,依此類推。規則規定:

玩家每次都必須跳到當前位置右側的乙個格仔內。玩家可以在任意時刻結束遊戲,獲得的分數為曾經到達過的格仔中的數字之和。

現在小 rrr 研發了一款彈跳機械人來參加這個遊戲。但是這個機械人有乙個非常嚴重的缺陷,它每次向右彈跳的距離只能為固定的 ddd 。小 rrr 希望改進他的機械人,如果他花 ggg 個金幣改進他的機械人,那麼他的機械人靈活性就能增加 ggg ,但是需要注意的是,每 次彈跳的距離至少為 111 。具體而言,當 g現在小 rrr 希望獲得至少 kkk 分,請問他至少要花多少金幣來改造他的機械人。

第一行三個正整數 nnn , ddd , kkk ,分別表示格仔的數目,改進前機械人彈跳的固定距離,以及希望至少獲得的分數。相鄰兩個數 之間用乙個空格隔開。

接下來 nnn 行,每行兩個正整數 xi,six_i,s_ixi​,si​ ,分別表示起點到第 iii 個格仔的距離以及第 iii 個格仔的分數。兩個數之間用乙個空格隔開。保證 xix_ixi​ 按遞增順序輸入。

共一行,乙個整數,表示至少要花多少金幣來改造他的機械人。若無論如何他都無法獲得至少 kkk 分,輸出 −1-1−1 。

輸入樣例#1:

7 4 10

2 65 -3

10 3

11 -3

13 1

17 6

20 2

輸出樣例#1:

2輸入樣例#2:

7 4 20

2 65 -3

10 3

11 -3

13 1

17 6

20 2

輸出樣例#2:

-1【輸入輸出樣例 1 說明】

花費 2 個金幣改進後, 小 r 的機械人依次選擇的向右彈跳的距離分別為 2, 3, 5, 3, 4,3, 先後到達的位置分別為 2, 5, 10, 13, 17, 20, 對應 1, 2, 3, 5, 6, 7 這 6 個格仔。這些格仔中的數字之和 15 即為小 r 獲得的分數。

輸入輸出樣例 2 說明

由於樣例中 7 個格仔組合的最大可能數字之和只有 18 ,無論如何都無法獲得 20 分

資料規模與約定

本題共 10 組測試資料,每組資料 10 分。

對於全部的資料滿足 1≤n≤500000,1≤d≤2000,1≤x_i,k≤109,∣si∣<1051 ≤ n ≤ 500000, 1 ≤ d ≤2000, 1 ≤ x_i, k ≤ 10^9, |si| < 10^51≤n≤500000,1≤d≤2000,1≤x_i,k≤109,∣si∣<105 。

對於第 1, 2 組測試資料, n ≤ 10;

對於第 3, 4, 5 組測試資料, n ≤ 500

對於第 6, 7, 8 組測試資料, d = 1

首先看到這個題目,很容易看出答案的單調性,所以果斷上二分,那麼如何check

看起來貌似很像 跳石頭 和 烏龜棋之類的

於是很容易想到dp來check,具體請看標程,注意需要單調佇列優化,如果不想用,告訴大家乙個小技巧

因為答案不會太大,所以二分時右端點設成 1005 就好了,這樣不需要單調佇列優化。

#includeusing namespace std;

const long long maxn=500005;

const long long inf=1000000005;

long long n,k;

int d;

struct house

lemon[maxn];

int q[maxn],head,t;

long long f[maxn];

void push(int x)

bool check(int mid)

return 0;

}int main()

else l=mid+1;

}cout

}

洛谷P3957 跳房子

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

洛谷P3957 跳房子

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

洛谷P3957 跳房子

普及組的題.填坑來了。當年的我一眼二分 dp,現在都佩服起自己來了.然後我們就寫個二分,在check裡面寫單調佇列優化dp即可。然後就a了.1 include 2 include 3 include 4 5 typedef long long ll 6 const int n 500010 7 co...