题目
有$N$门课程,第$i$门课程有$2$个属性$H_i$和$C_i$ 。从$N$门课程中选择$m(m\leq0)$门课程,记为第$x_1,x_2,\cdots,x_m$门课程,使$a^2−a\times b−b^2$取最大值。
其中:$a:=\sum{i=1}^mH\{x_i} \quad b:=\sum{i=1}^mC\{x_i}$
数据范围
$1\leq N \leq 500 \quad 1 \leq H_i \leq 10000 \quad 1 \leq C_i \leq 100$
做法
感觉是DP,但是定义$dp[i]:=$前$i$门中所能得到的最大值,推了一下发现并不满足最优性原理,也不是多段决策。
注意到,$C$的范围很小。考虑将$C$也当作状态的一维。
当$b$固定时,要最大化的函数记为$f(x)=x^2−b\times x−b^2$是关于$x$的二次函数,且对称轴$>0$ 。而$f(0)=−b^2<0$,所以函数最大值在$0$或者$x$的最大值处取得。于是,问题规约为求$b$固定时$x$的最大值。
我们以$C$为重量,$H$为价值,做一个背包,即可求出$b$为定值时$x$的最大值。
代码
|
|
注意
乘法会超过int
的范围。