背包 贪心

背包 

(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

背包 贪心的相关文章

集训第四周(高效算法设计)L题 (背包贪心)

Description John Doe is a famous DJ and, therefore, has the problem of optimizing the placement of songs on his tapes. For a given tape and for each song on that tape John knows the length of the song and the frequency of playing that song. His probl

饭卡(01背包+贪心)

电子科大本部食堂的饭卡有一种很诡异的设计,即在购买之前判断余额.如果购买一个商品之前,卡上的剩余金额大于或等于5元,就一定可以购买成功(即使购买后卡上余额为负),否则无法购买(即使金额足够).所以大家都希望尽量使卡上的余额最少. 某天,食堂中有n种菜出售,每种菜可购买一次.已知每种菜的价格以及卡上的余额,问最少可使卡上的余额为多少. Input多组数据.对于每组数据: 第一行为正整数n,表示菜的数量.n<=1000. 第二行包括n个正整数,表示每种菜的价格.价格不超过50. 第三行包括一个正整数

HDU -2546饭卡(01背包+贪心)

这道题有个小小的坎,就是低于5块不能选,大于5块,可以任意选,所以就在初始条件判断一下剩余钱数,然后如果大于5的话,这时候就要用到贪心的思想,只要大于等于5,先找最大的那个,然后剩下的再去用背包去选择,这样的结果一定是最优的.因为最大的那个一定会被选中,剩下多少钱都无所谓,用背包可以获得剩下的最优解,所以最后也是最优解 代码如下 1 #include <cstdio> 2 #include <cstring> 3 #include <algorithm> 4 using

Pick apples(完全背包+贪心)

Description Once ago, there is a mystery yard which only produces three kinds of apples. The number of each kind is infinite. A girl carrying a big bag comes into the yard. She is so surprised because she has never seen so many apples before. Each ki

POJ1742 Coins 多重背包+贪心

Vjudge传送门 $Sol$ 首先发现这是一个多重背包,所以可以用多重背包的一般解法(直接拆分法,二进制拆分法...) 但事实是会TLE,只能另寻出路 本题仅关注“可行性”(面值能否拼成)而不是“最优性”,这是一个特殊之处. 从这里找优化 在“最优性”的问题中,$f[j]$从$f[j]$或$f[j-a[i]]$中转移而来:而在这样的“可行性”问题中,其实只要$f[j]$可行,我们就可以不用考虑$f[j-a[i]$了,也可以反过来说. 于是我们可以考虑一种贪心策略,设$used[j]$表示$f[

多校第二场 1004 hdu 5303 Delicious Apples(背包+贪心)

题目链接: 点击打开链接 题目大意: 在一个周长为L的环上.给出n棵苹果树.苹果树的位置是xi,苹果树是ai,苹果商店在0位置,人的篮子最大容量为k,问最少做多远的距离可以把苹果都运到店里 题目分析: 首先我们能够(ˇ?ˇ) 想-,假设在走半圆之内能够装满,那么一定优于绕一圈回到起点.所以我们从中点将这个圈劈开.那么对于每一个区间由于苹果数非常少,所以能够利用belong[x]数组记录每一个苹果所在的苹果树位置,然后将苹果依照所在的位置排序,那么也就是我们知道每次拿k个苹果的代价是苹果所在的最远

饭卡 01背包 + 贪心

饭卡 电子科大本部食堂的饭卡有一种很诡异的设计,即在购买之前判断余额.如果购买一个商品之前,卡上的剩余金额大于或等于5元,就一定可以购买成功(即使购买后卡上余额为负),否则无法购买(即使金额足够).所以大家都希望尽量使卡上的余额最少. 某天,食堂中有n种菜出售,每种菜可购买一次.已知每种菜的价格以及卡上的余额,问最少可使卡上的余额为多少. 多组数据.对于每组数据: 第一行为正整数n,表示菜的数量.n<=1000. 第二行包括n个正整数,表示每种菜的价格.价格不超过50. 第三行包括一个正整数m,

Proud Merchants HDU - 3466 01背包&amp;&amp;贪心

最近,我去了一个古老的国家.在很长一段时间里,它是世界上最富有.最强大的王国.结果,这个国家的人民仍然非常自豪,即使他们的国家不再那么富有.商人是最典型的,他们每个人只卖一件商品,价格是Pi,但是如果你的钱少于Qi,他们就会拒绝和你交易,而我评估每件商品的价值Vi.如果他有M单位的钱,iSea能得到的最大值是多少? 输入 在输入中有几个测试用例.每个测试用例以两个整数N M(1≤N≤500,1≤M≤5000)开始,表示项目编号和初始资金.接着N行,每一行包含3个数字Pi, Qi和Vi(1≤Pi≤

hdu2546_01背包+贪心

题目链接:http://acm.hdu.edu.cn/showproblem.php?pid=2546 注意:m<5的情况... 代码: #include<cstdio> #include<iostream> #include<cstring> #include<cstdlib> #include<algorithm> using namespace std; const int maxn = 1e3+10; int dp[maxn][ma