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]包含,那么前者是没有贡献的
那么简化后得到的栅栏是这样的:
2016 TCO Algorithm 1B SettingShield_第1张图片
首先假定特殊栅栏的强度为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[]的代价
加入特殊栅栏的影响,显然,特殊栅栏的强度越大,普通栅栏的代价就越小:
2016 TCO Algorithm 1B SettingShield_第2张图片
设f(x)表示特殊栅栏强度为x时普通栅栏的最小代价
我们要求的是tx+f(x)最小
设f(x)表示特殊栅栏强度为x时普通栅栏的最小代价
我们要求的是tx+f(x)最小
这个东西是可以三分的?!
证明
证明COST[x]=tx+f(x)满足三分性
设p[x][]表示特殊栅栏强度为x时普通栅栏的最优方案
假设最优点为OPT,那么就是对于a

你可能感兴趣的:(解题报告,srm)