luogu鏈接
解法
高妙的dp:
首先調整一下權值:
ai=ai+xi,bi=bi−xi,ci=ci+xi,di=di−xi
這樣就可以:
f(i,j)=di+aj (i<j)
f(i,j)=ci+bj (i>j)
然後似乎是一種套路dp模式:記dp[i][j]表示前i-1個點,形成了j條鏈的最小權值和,枚舉一下第i個點的連邊方式(好像和插頭dp有點類似)進行轉移。
最後答案是dp[n+1][1]
首先考慮(i!=s)且(i!=e)的情況:
首先s和e所在的鏈會在最後合併,所以j≥(i>e)+(i>s),表示至少有哪些鏈,然後枚舉i的兩個插頭的方向:
如果向i連邊的點比i小,那麼i貢獻一個ai,否則貢獻一個bi,然後i連出去的點比i小,i貢獻一個ci,否則貢獻一個di,然後再這些連邊過程中,可能會出現改變鏈總數的情況:當i貢獻ai和ci的時候,說明原先兩條沒有關係的鏈被連到了一起。鏈的總數-1.
當i貢獻bi和di的時候,說明這個點所在的鏈和之前i-1個點沒有關係。需要新加一條鏈。
然後剩下的兩種情況要注意,它們能否出現要通過討論p的數量和i,s,e的位置關係。
考慮i==s的情況:
這個時候只能從i向其它點連邊,其它的分類討論和上面一樣
i==e的情況
這時候只能從其他點連回i。