跳房子,也叫跳飛機,是一種世界性的兒童遊戲,也是中國民間傳統的體育遊戲之一。
跳房子的遊戲規則如下:
在地面上確定乙個起點,然後在起點右側畫 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...