注:思想學習了wzy的部落格,自己也有感受。
題目描述
跳房子,也叫跳飛機,是一種世界性的兒童遊戲,也是中國民間傳統的體育遊戲之一。跳房子的遊戲規則如下:
在地面上確定乙個起點,然後在起點右側畫n 個格仔,這些格仔都在同一條直線上。每個格仔內有乙個數字(整數),表示到達這個格仔能得到的分數。玩家第一次從起點開始向右跳,跳到起點右側的乙個格仔內。第二次再從當前位置繼續向右跳,依此類推。規則規定:
玩家每次都必須跳到當前位置右側的乙個格仔內。玩家可以在任意時刻結束遊戲,獲得的分數為曾經到達過的格仔中的數字之和。
現在小r 研發了一款彈跳機械人來參加這個遊戲。但是這個機械人有乙個非常嚴重的缺陷,它每次向右彈跳的距離只能為固定的d。小r 希望改進他的機械人,如果他花g 個金幣改進他的機械人,那麼他的機械人靈活性就能增加g,但是需要注意的是,每次彈跳的距離至少為1。具體而言,當g < d時,他的機械人每次可以選擇向右彈跳的距離為d-g, d-g+1,d-g+2,…,d+g-2,d+g-1,d+g;否則(當g ≥ d時),他的機械人每次可以選擇向右彈跳的距離為1,2,3,…,d+g-2,d+g-1,d+g。
現在小r 希望獲得至少k 分,請問他至少要花多少金幣來改造他的機械人。
輸入第一行三個正整數n,d,k,分別表示格仔的數目,改進前機械人彈跳的固定距離,以及希望至少獲得的分數。相鄰兩個數之間用乙個空格隔開。
接下來n 行,每行兩個正整數
輸出共一行,乙個整數,表示至少要花多少金幣來改造他的機械人。若無論如何他都無法獲
得至少k 分,輸出-1。
樣例輸入
7 4 10
2 6
5 -3
10 3
11 -3
13 1
17 6
20 2
樣例輸出
這是今年的壓軸題,感覺比去年那個要難一些。
主要還是因為之前不怎麼明白單調佇列的東西,於是考完了以後,趕緊補一下這方面的知識,現在也覺得這道題也沒這麼可怕了。
說實話,這道題的答案就是列舉出來的。很顯然,暴力是沒用的。我們要找乙個優化的查詢方式,於是就很容易的想到了二分。但是二分的判斷過程中還是要列舉(dp:f[i]=max(f[j]|從j可以跳到i)+當前位置分數)這依然很容易超時,我們又需要乙個高階的方法。就是最近講的用單調佇列優化dp。
維護佇列:對於格仔j,在把f[j]放進去和佇列最後面的元素f[k]比較,如果f[k]《f[j],f[k]就沒有用了;再把不在可走範圍內的去掉,就可以保證最優解並不會超時(隊首)。
//借鑑wzy的思路
#include
#include
#include
#include
#include
#define maxn 500000
using
namespace
std;
deque
q;int read()
while(s>='0'&&s<='9')
return x*f;
}int pos[maxn+5],a[maxn+5],f[maxn+5],n,d,k;
bool check(int g)
while(!q.empty()&&pos[q.front()]+r1//把無法繼續使用的pop掉
q.pop_front();
if(!q.empty()) f[i]=f[q.front()]+a[i];
else f[i]=int_min;
if(f[i]>=k) return
1; }
return0;}
int main()
if(sum//無法到達直接特判
int l=0,r=pos[n],m;
while(l2;
if(check(m)) r=m;
else l=m+1;
}printf("%d\n",r);
return
0;}
NOIP2017普及組正式賽 跳房子
這一題很有它的價值,我都要認真思考一番才能夠想到方法。先講一下題目大意 題目描述 跳房子,也叫跳飛機,是一種世界性的兒童遊戲,也是中國民間傳統的體育遊戲之一。跳房子的遊戲規則如下 在地面上確定乙個起點,然後在起點右側畫 n 個格仔,這些格仔都在同一條直線上。每個格仔內有乙個數字 整數 表示到達這個格...
noip 2017 普及組 T4 跳房子
跳房子,也叫跳飛機,是一種世界性的兒童遊戲,也是中國民間傳統的體育遊戲之一。跳房子的遊戲規則如下 在地面上確定乙個起點,然後在起點右側畫 n 個格仔,這些格仔都在同一條直線上。每個格仔內有乙個數字 整數 表示到達這個格仔能得到的分數。玩家第一次從起點開始向右跳,跳到起點右側的乙個格仔內。第二次再從當...
NOIP2017跳房子(普及T4)
題面傳送門 感覺在pj組放這道題是不是有些難了,難度大於noip2015d2t1那道跳石子 老套路先二分答案 dp f i 表示跳前i個格仔,且停在第i個格仔最大分數 sc i 表示第i個格仔的分數。轉移 f i max f j sc i 前提是從j可以跳到i 顯然,這種時間複雜度太大 需要再次使用...