请问这题怎么用二进制枚举+贪心来做???
1856: 解题数量题目描述
编程竞赛网站提供了比赛题目。比赛有D个难度等级,每个难度等级的每个题目都根据其难度分配一个分数,每个难度等级都有p个题目。目前,对于1到D(含)之间的每个整数i,都存在分数为100*i分的pi问题,即第1级难度对应的每个题目分数是100*1,第2级难度对应的每个题目分数是100*2,第D级难度对应的每个题目分数100*D。这些p1+…+pD问题是编程竞赛网站上可用的所有问题。
每一个参赛的用户都有一个总分来记录所做的题目。用户的总得分是以下两个方面组成:
基本分数:用户解决的所有问题的分数之和。
完成奖励:当用户解决完该等级所有问题之后,除了基础分数,还有奖励分数c 。
作为比赛的一个新用户,现在没有解决任何问题。给自己定下一个目标是总分达到G或以上。为了实现这个目标,至少需要解决多少题目?
输入
输入D+1行
第一行输入两个整数:D G
从第二行开始输入D行,每行两个整数:p c
输入格式如下:
D G
p1 c1
:
pD cD
条件:
1≤D≤10
1≤pi≤100
100≤ci≤106
100≤G
ci和G都是100的倍数
总分可以是G或者更高
输出
输出需要解决的题目的最小数量,使得总分达到G或以上。注意,目标总是可以实现的。
样例输入 Copy
2 700
3 500
5 800
样例输出 Copy
3
提示
样例1说明:
在样例1中有3道100分的题,6道200分的题。全部解决了3道100分的题,奖励500分;全部解决了5道200分的题,奖励800分。目标总分是700分或者往上。
按照贪心的解决方案,先解决分数大的题目,这样之间做4道200分的题,得到800分,就可以。但是,如果解决了3道100分的题目,然后奖励500分,这样也能得到800分,这样可以用更少的题来实现目标。
样例输入2:
2 2000
3 500
5 800
样例输出2:
7
样例2说明:
可以这样实现目标,先做5道200分的题,获得800分的奖励,再2道100分的题,做7道题就实现目标。
样例输入3:
2 400
3 500
5 800
样例输出3:
2
样例3说明:
直接做2道200分的题
样例输入4:
5 25000
20 1000
40 1000
50 1000
30 1000
1 1000
样例输出4:
66
来源/分类
二进制枚举 贪心