背包
(pack.pas/c/cpp)
【问题描述】
滑稽大师cdc依靠每天的辛勤努力,终于收集到了足够多的滑稽,每个滑稽有两个属性,分别是滑稽值h和体积v,他要把所有的滑稽带走,但是cdc只有一个固定容积的背包。怎么才能带走尽可能多的滑稽值呢?
因为cdc是神犇,所以他很轻松的解决了这个问题。现在cdc来到了滑稽工厂,他要把所有的滑稽打包发给各个滑稽销售点,但是每次打包cdc都要付出一定的代价。
我们把滑稽工厂打包滑稽的生产线看作一个一维线段,每个滑稽都是线段上的一个点,且每个滑稽的顺序不可改变。
且每次打包滑稽只能是一段连续的区间,定义这个线段上从左到右第i个点的滑稽值为hi,体积为vi,设每次打包的区间为[i,j],则每次打包的代价为,现在cdc想知道他需要支付的最小代价为多少。他需要支付的代价为打包所有滑稽的代价和。
【输入】
第一行为一个正整数N,表示N个滑稽
接下来的N行每行两个正整数v,h,分别表示体积与滑稽值
【输出】
输出仅一行,表示cdc可能需要支付的最小代价
【输入输出样例1】
pack.in |
pack.out |
4 1 4 2 3 3 2 4 1 |
85 /*分组为{1}{2}{3}{4} 85=4*1+(4+3)*2+(4+3+2)*3+(4+3+2+1)*4 */ |
【数据范围】
对于60%的数据 N<=1000
对于100%的数据
N<=1000000
hi,vi<=500
保证答案在long long 范围内
聪明人一眼可以看出这是dp...........................外貌的的贪心;
一个一个装即可;
时间: 2024-11-08 21:42:21