首页 > 代码库 > 背包 贪心

背包 贪心

背包 

(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...........................外貌的的贪心;

一个一个装即可;

背包 贪心