Problem Description
大赛将至,摆在你面前的是
n
道题目,第
i(1≤i≤n)
道题目能提升
ai
点智力值,代码量为
bi
KB,无聊值为
ci
,求至少提升
m
点智力值的情况下,所做题目代码量之和
∗
无聊值之和最小为多少。
样例解释:
选择第1、3、4道题
样例解释:
选择第1、3、4道题
Input
多组测试数据
第一行两个整数 n,m(0<n≤400)
接下来 n 行每行三个数, ai,bi,ci(0<bi,ci≤1000,0<ai≤800) 。
0<m≤∑ai≤800
第一行两个整数 n,m(0<n≤400)
接下来 n 行每行三个数, ai,bi,ci(0<bi,ci≤1000,0<ai≤800) 。
0<m≤∑ai≤800
Output
一个数,至少提升
m
点智力值的情况下,所做题目代码量之和
∗
无聊值之和的最小值。
思路
核心是最小乘积问题,把和的乘积转化为一个目标量
步骤:
从只有一维数据的两侧入手(得到AB边)
利用滚动数组的动态规划,实质是01背包,找到一个在此基础上的最优解,同时返回得到图中的坐标(sumx和sumy)
根据几何性质找到一个更小的C点
分AC和CB两边重复之前的操作