Description
Solution
这道题转换一下模型其实就是有很多个带权向量,然后给你一个矩形,给每个向量加一个系数,使得长宽都不超过矩形且权值和最大。
很容易就可以证明出来只需要两个向量就可以了,如果有第三个有系数的,那么就说明这种情况的时候第三个更优,那么还不如直接用第三个替换掉一个。
那么我们现在知道了只用选两个,那么我们该怎么去做这道题?
首先肯定要n2的去枚举,然后我们知道了两个向量之后,就需要列方程了。
y=min(HP−x∗a[i]a[j],MP−x∗b[i]b[j])c[j]+x∗∗c[i]设x为i向量的系数,然后y是权值和。
那么现在有两种情况,一个是min左边的小,另一个是min右边的小。
那么我们可以分别考虑一下,可以把min左边的和右边的分别抽出来。
当HP−x∗a[i]a[j]<MP−x∗b[i]b[j]的时候就会选左边
此时分界点x′=MPa[j]−HPb[j]b[i]a[j]−b[j]a[i]
当x<=x’的时候,y=(c[i]−a[i]∗c[j]a[j])x+c[j]∗HPa[j]
当x>=x’的时候,y=(c[i]−b[i]∗c[j]b[j])x+c[j]∗MPb[j]
因为现在考虑必须选i向量的情况,所以lim<=min(MPb[i],HPa[i])
如果当前要选则的范围不在lim范围内,那么就不能选。
对于上面y的等式,无论哪边小,最优值都是x’,因为要考虑的是当前选择i向量的最优情况,都必须在斜率的正负性倾向于i向量的方向选择,否则以i向量为主体就没有意义了,这个自己对着上面的斜率分析一下就好了。
Code