for(int i=2;i<=n;++i) { //上一行的左端点到本行的左端点 上一行的右端点到本行的左端点 //为什么取完min后要存到dp[1][i]而不是dp[0][i]中 //存相反就不可以 //不是到左端点就存到dp[0][i]吗 //右端点就dp[1][i]; //我这里的1表示右端点,0表示左端点 dp[1][i]=min(dp[0][i-1]+abs(l[i-1]-l[i])+len[i]+1,dp[1][i-1]+abs(r[i-1]-l[i])+len[i]+1); dp[0][i]=min(dp[0][i-1]+abs(l[i-1]-r[i])+len[i]+1,dp[1][i-1]+abs(r[i-1]-r[i])+len[i]+1); }