这道题很明显是一个动态规划,但是状态转移设计起来有点费劲
首先先把输入整明白,把每一列的上限和下限存起来,差值就是可以走的范围
for(register int i(1) ; i<=n ; i=-~i) x[i]=read(),y[i]=read();
for(register int i(1) ; i<=n ; i=-~i) shang[i]=m,xia[i]=1;
for(register int i(1) ; i<=k ; i=-~i){
int p,l,h;
p=read();l=read();h=read();
shang[p] = h-1;
xia[p] = l+1;
vis[p] = 1;
}
然后考虑上升和下降两种情况,设dp[i][j]表示小鸟飞到i,j的最少跳跃次数
上升
随便导导(时间≈∞)后,发现上升其实是一个完全背包QWQ。考虑跳到这个点,可以从前一个单位的j-x[i]跳过来,也可以从当前单位的j-x[i]跳过来。(因为单位时间内可以跳很多次)
转移方程dp[i][j]