2016 TCO Algorithm 1B SettingShield
題目大意
有h個普通柵欄,一個特殊柵欄和n棵植物
第i棵植物位于第i個單位
對于第i個普通柵欄有其保護的區間l[i]到r[i],特殊柵欄的保護區間是1到n
每個柵欄有一個非負整數s[i],表示它的強度
對于代價,普通柵欄需花費s[i],特殊柵欄需花費t*s[i]
對于第i棵植物有protection[i],需滿足:對于所有保護了植物i的柵欄的強度總和大于等于pretection[i]
求最小的代價
1<=n<=10^5
1<=s[i],t<=10^7
解法
首先考慮去掉普通柵欄中對答案沒有貢獻的柵欄,如果柵欄[a,b]被柵欄[c,d]包含,那么前者是沒有貢獻的
那么簡化后得到的柵欄是這樣的:
首先假定特殊柵欄的強度為0
那么如何構造最優的方案?
先給出構造方法:
從左到右處理柵欄[a,b],設c表示一個最大的區間[a,c]使得[a,c]不與后面的柵欄相交(即不會被后面的影響到),然后這個柵欄的強度就設為[a,c]之間的最大的protection,然后[a,b]之間的植物的protection減去這個強度
為什么是對的呢?
設p[]是最優方案,p[i]表示從左到右第i個柵欄選定的強度
由于p[1]不可能變小(因為最前面那一段不會被后面的影響)(其他位置的變動是類似的,所以只討論第一位就開始變動)
那么設p1[1]=p[1]+d(d>0),如果p[2]被影響到了,那么p1[2]=p[2]-d,如果p[3]被影響到了,那么p1[3]=p[3]+d…
就是說,這樣的影響是連續的且正負交替
由于開頭是正數,所以最后的代價不可能由于最開始p[]的代價
加入特殊柵欄的影響,顯然,特殊柵欄的強度越大,普通柵欄的代價就越小:
設f(x)表示特殊柵欄強度為x時普通柵欄的最小代價
我們要求的是tx+f(x)最小
設f(x)表示特殊柵欄強度為x時普通柵欄的最小代價
我們要求的是tx+f(x)最小
這個東西是可以三分的?!
證明
證明COST[x]=tx+f(x)滿足三分性
設p[x][]表示特殊柵欄強度為x時普通柵欄的最優方案
假設最優點為OPT,那么就是對于a
總結
以上是生活随笔為你收集整理的2016 TCO Algorithm 1B SettingShield的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 批量修改文件名字、不同的目录下
- 下一篇: 三级管的三种工作状态