#include<bits/stdc++.h>
#define int long long
using namespace std;
int n,l[20005],r[20005],dp[20005][2];
int jl1(int x,int l,int r){
if(r<=x)return x-l;
else return r-x+r-l;
}
int jl2(int x,int l,int r){
if(x<=l)return r-x;
else x-l+r-l;
}
signed main(){
ios::sync_with_stdio(false);
cin.tie(0),cout.tie(0);
cin>>n;
for(int i=1;i<=n;i++)cin>>l[i]>>r[i];
dp[1][0]=r[1]-1+r[1]-l[1],dp[1][1]=r[1]-1;
for(int i=2;i<=n;i++){
dp[i][0]=min(dp[i-1][0]+jl1(l[i-1],l[i],r[i]),dp[i-1][1]+jl1(r[i-1],l[i],r[i]))+1;
dp[i][1]=min(dp[i-1][0]+jl2(l[i-1],l[i],r[i]),dp[i-1][1]+jl2(r[i-1],l[i],r[i]))+1;
}
cout<<min(dp[n][0]+n-l[n],dp[n][1]+n-r[n]);
return 0;
}
这份代码本人调了半个小时不知道错误,对照了题解才发现:
int jl2(int x,int l,int r){
if(x<=l)return r-x;
else x-l+r-l;//这里没return。。。
}
所以——警示后人:注意函数 else 的 return。(本人已经犯了两次类似错误了)
不过话说开了O2优化为什么没报RE呢?