当 i!=s&&i!=e 时,对于新插入的点新开一段使得左右都比它大需要满足 j>(i>s)+(i>e) 的条件,即:
if(j>(i>s)+(i>e)) dp[i][j]=min(dp[i][j],dp[i-1][j-1]-x[i]+b[i]-x[i]+d[i]);
因为 s 和 e 点都存在时,如果由 dp[i-1][j-1],j=2 转移过来则说明 s 和 e 被连成了同一段,这种情况下显然无法插入下一个点
附上这一段的填表法DP代码:
if(j>(i>s)+(i>e)) dp[i][j]=min(dp[i][j],dp[i-1][j-1]-x[i]+b[i]-x[i]+d[i]);
dp[i][j]=min(dp[i][j],dp[i-1][j+1]+x[i]+a[i]+x[i]+c[i]);
if(j>1||i<s) dp[i][j]=min(dp[i][j],dp[i-1][j]-x[i]+b[i]+x[i]+c[i]);
if(j>1||i<e) dp[i][j]=min(dp[i][j],dp[i-1][j]+x[i]+a[i]-x[i]+d[i]);