P3842 [TJOI2007] 线段 - 洛谷 | 计算机科学教育新生态 (luogu.com.cn)
#include <iostream>
#include <algorithm>
using namespace std ;
const int N = 2e4+10 ;
int n , l[N] , r[N] , dp[N][3] ;
int main ()
{
scanf ("%d",&n) ;
for (int i = 1;i <= n;i++)
scanf ("%d%d",&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++)
{
int a , b , c , d ;
a = dp[i-1][0] + abs (l[i-1] - r[i]) + r[i] - l[i] + 1;
b = dp[i-1][1] + abs (r[i-1] - r[i]) + r[i] - l[i] + 1;
dp[i][0] = min (a,b) ;
c = dp[i-1][0] + abs (l[i-1] - l[i]) + r[i] - l[i] + 1;
d = dp[i-1][1] + abs (r[i-1] - l[i]) + r[i] - l[i] + 1;
dp[i][1] = min (c,d) ;
}
dp[n][0] = dp[n][0] + n - l[n] ;
dp[n][1] = dp[n][1] + n - r[n] ;
cout << min(dp[n][0],dp[n][1]) << endl ;
return 0 ;
}