分析:我們用dp[i][j][0/1]表示第i座樓與第i-1座樓是否相連(0/1),前i座樓構成了前j組的最小距離花費。
然後可以寫出轉移方程
但顯然是n^2,由於j與dp具有單調性,j增加,dp也會增加,而且dp是乙個下凸函式,因為選的組的距離會越來越大。
考慮二分把列舉j的一維省略,使每分一組獲得乙個代價來控制選的組數量。
ac code:
#includeusing namespace std;
typedef long long ll;
const int maxn=1e5+5;
pairdp[maxn][2];
ll s[maxn];
const ll inf=1e18;
int n;
void solve(ll mid)
else l=mid+1;
}printf("%lld\n",ans);
return 0;
}
學習筆記 wqs二分 dp凸優化
從乙個經典問題談起 有乙個長度為 n 的序列 a 要求找出恰好 k 個不相交的連續子串行,使得這 k 個序列的和最大 1 leq k leq n leq 10 5,10 9 leq a i leq 10 9 先假裝都會 1 leq k leq n leq 1000 的 dp 做法以及 k 1 的子問...
WQS二分 學習筆記
我的理解 不一定很對 大概就是某個東西越多總貢獻越大,要求剛好取n個時的最優解。可以把 dp 狀態裡記的取的個數這一維去掉,而設乙個 co st,取 k 個物品,總貢獻要多減去cost k,然後 dp cos t 越大,物品數取越少。二分 co st使得 dp 得到的答案剛好取了 n 個物品。設 g...
WQS二分學習筆記
wqs 二分聽起來是個很難的演算法,其實學起來也並不是那麼難。在某些題目中,會對於某個取得越多越優的物品,限定你最多選擇 k 個,問你能得到的最優答案。例如這道題目 cf739e gosha is hunting。這些題目一般都可以通過列舉選擇的物品個數並 o n dp 來做到 o nk 但如果隨著...