題面傳送門
感覺在pj組放這道題是不是有些難了,難度大於noip2015d2t1那道跳石子
老套路先二分答案+dp
f[i]表示跳前i個格仔,且停在第i個格仔最大分數;
sc[i]表示第i個格仔的分數。
轉移:f[i]=max(f[j])+sc[i] 前提是從j可以跳到i
顯然,這種時間複雜度太大
需要再次使用單調佇列優化
發現轉移中j的位置是隨著i的右移而右移的
對於格仔j,如果dis[i]-dis[j]>=機械人能跳的最小距離,顯然f[j]是可以進隊的
但是要維護整個佇列單調遞減,每次直接去隊頭就好了
注意要把最小值置極小,否則會wa
#include
#define rep(i,a,b) for(register int i=a;i<=b;i++)
#define dep(i,a,b) for(register int i=a;i>=b;i--)
#define ll long long
#define mem(x,num) memset(x,num,sizeof x)
using
namespace
std;
const ll maxn=5e5+6,inf=1844387848000;
ll dis[maxn],sc[maxn],f[maxn],n,d,k,x,y;
bool check(int x)
while(!que.empty()&&dis[que.front()]+steprif(!que.empty())f[i]=f[que.front()]+sc[i];
else f[i]=-inf;
if(f[i]>=k) return
1; }
return0;}
int main()
if(sumcout
<<"-1\n";return
0;} int l=1,r=dis[n],mid;
while(l0);
mid=(l+r)/2;
if(check(mid))r=mid;
else l=mid+1;
}cout
0;}
noip 2017 普及組 T4 跳房子
跳房子,也叫跳飛機,是一種世界性的兒童遊戲,也是中國民間傳統的體育遊戲之一。跳房子的遊戲規則如下 在地面上確定乙個起點,然後在起點右側畫 n 個格仔,這些格仔都在同一條直線上。每個格仔內有乙個數字 整數 表示到達這個格仔能得到的分數。玩家第一次從起點開始向右跳,跳到起點右側的乙個格仔內。第二次再從當...
NOIP2017普及組 跳房子
注 思想學習了wzy的部落格,自己也有感受。題目描述 跳房子,也叫跳飛機,是一種世界性的兒童遊戲,也是中國民間傳統的體育遊戲之一。跳房子的遊戲規則如下 在地面上確定乙個起點,然後在起點右側畫n 個格仔,這些格仔都在同一條直線上。每個格仔內有乙個數字 整數 表示到達這個格仔能得到的分數。玩家第一次從起...
NOIP2017普及組正式賽 跳房子
這一題很有它的價值,我都要認真思考一番才能夠想到方法。先講一下題目大意 題目描述 跳房子,也叫跳飛機,是一種世界性的兒童遊戲,也是中國民間傳統的體育遊戲之一。跳房子的遊戲規則如下 在地面上確定乙個起點,然後在起點右側畫 n 個格仔,這些格仔都在同一條直線上。每個格仔內有乙個數字 整數 表示到達這個格...