【问题引入】
给定两个正数数列
{
a
i
}
,
{
b
i
}
\{a_i\}, \{b_i\}
{ai},{bi},求一个数列
{
x
i
}
,
x
i
∈
{
0
,
1
}
\{x_i\},x_i∈\{0,1\}
{xi},xi∈{0,1},使得下列式子取到最大值:
∑
i
=
1
n
a
i
∗
x
i
∑
i
=
1
n
b
i
∗
x
i
\frac{\sum_{i=1}^na_i*x_i}{\sum_{i=1}^nb_i*x_i}
∑i=1nbi∗xi∑i=1nai∗xi
【分析】
设:
a
n
s
∗
=
∑
i
=
1
n
a
i
∗
x
i
∑
i
=
1
n
b
i
∗
x
i
ans^*=\frac{\sum_{i=1}^na_i*x_i}{\sum_{i=1}^nb_i*x_i}
ans∗=∑i=1nbi∗xi∑i=1nai∗xi
其中
a
n
s
ans
ans表示答案。对上式进行变形:
∑
i
=
1
n
a
i
∗
x
i
−
a
n
s
∗
∑
i
=
1
n
b
i
∗
x
i
=
0
\sum_{i=1}^{n}a_i*x_i-ans^*\sum_{i=1}^nb_i*x_i=0
i=1∑nai∗xi−ans∗i=1∑nbi∗xi=0
那么最关键的问题就是确定数列
{
x
i
}
\{x_i\}
{xi}。令:
f
(
T
)
=
∑
i
=
1
n
a
i
∗
x
i
−
T
∑
i
=
1
n
b
i
∗
x
i
f(T)=\sum_{i=1}^{n}a_i*x_i-T\sum_{i=1}^nb_i*x_i
f(T)=i=1∑nai∗xi−Ti=1∑nbi∗xi
由于
a
i
>
0
,
b
i
>
0
a_i>0,b_i>0
ai>0,bi>0,所以
f
(
T
)
f(T)
f(T)的图像与
x
x
x轴的交点恒在
x
x
x轴的正半轴,与
y
y
y轴的交点恒在
y
y
y轴的正半轴,且函数的零点为
∑
i
=
1
n
a
i
∗
x
i
∑
i
=
1
n
b
i
∗
x
i
\frac{\sum_{i=1}^na_i*x_i}{\sum_{i=1}^nb_i*x_i}
∑i=1nbi∗xi∑i=1nai∗xi。
如果我们改变数列
{
x
i
}
\{x_i\}
{xi}的元素,将会得到若干这样的图象:
由加粗部分知,图中的红色点为图象(即某一个
{
x
i
}
\{x_i\}
{xi})的对应答案。如今我们要取最大,于是可以考虑二分。
设一条二分线
x
=
m
i
d
x=mid
x=mid。
显然:
1、若存在一个函数
f
(
m
i
d
)
>
0
f(mid)>0
f(mid)>0,则
m
i
d
mid
mid需向右移动;
2、若所有函数
f
(
m
i
d
)
<
0
f(mid)<0
f(mid)<0,则
m
i
d
mid
mid需向左移动;
3、若所有函数
f
(
m
i
d
)
f(mid)
f(mid)非正,且存在一个函数
f
(
m
i
d
)
=
0
f(mid)=0
f(mid)=0,则mid为答案。
当然,在题目中,我们不可能把每一个函数的解析式求出来。
观察上列条件,我们发现:mid的移动方向只于众多函数
f
(
m
i
d
)
f(mid)
f(mid)的最大值有关。所以我们只需要求出其中最大的函数值即可。
至于如何求这个最大值,就只能根据具体题目分析了。
以这道题为例。对于一个二分值
m
i
d
mid
mid,我们可以构造一个新数列
c
i
=
a
i
−
m
i
d
∗
b
i
c_i=a_i-mid*b_i
ci=ai−mid∗bi,然后求这个数列的最大值即可(至少选择其中的一个元素)。