题目描述
马上又到了一年一度的新年联欢,小明作为班里的班长,负责组织策划新年联欢活动,他决定采购一些奖品奖励积极参与每个活动项目的同学。为了激励更多的人参与活动,需要采购的奖品数目越多越好。
班费中可支出的钱数为
�
m 元,现给定商店中
�
n 种可作为奖品的物品的价格和库存数量,怎样才能购得最多的物品数?
输入格式
输入共有
�
+
1
n+1 行:
第一行包含两个正整数 m(1<m≤10000)和n(1≤n≤100),表示可支出的费用为m元和可供购买的物品有n种。
接下来的n行,每行包含两个数(由一个空格分隔),分别表示一种物品的单价ai和库存数量bi。其中,ai和bi均不会超过10000。
输出格式
输出仅包含一个整数,表示最多可以购买的物品数量。
样例 #1
样例输入 #1
500 6
100 3
20 15
50 10
35 5
5 6
60 2
样例输出 #1
25
提示
【样例解释】
价格为
5
5 的可以买
6
6 个,价格为
2
0
20 的可以买
1
5
15 个,价格为
3
5
35 的可以买
4
4 个,总共买了
2
5
25 件奖品。
我的代码:
#include <bits/stdc++.h>//万能头
#define ll long long//给 long long 起个别名叫ll
using namespace std;
struct goods{//结构体
int price;//单价
int number;//数量
}g[100+7];//定义数组
bool cmp(goods g1,goods g2){
return g1.price<=g2.price;//按单价升序排
}
int main(){
int money,number;//定义可用班费,商品种类数
ll sum=0,goods_number=0;//当前总钱数,当前总个数
cin>>money>>number;//输入 可用班费,商品种类数
for(int i=0;i<number;i++){
cin>>g[i].price>>g[i].number;//输入 商品单价,商品数量
}
sort(g,g+number,cmp);//升序
for(int i=0;i<number;i++){
for(int j=0;j<=g[i].number;j++){
if(j!=0){//特判
sum+=g[i].price;//累加
goods_number++;
}
if(sum>money){//当前总钱数多了
cout<<goods_number-1;//输出当前商品总个数-1
return 0;//返回
}else if(sum==money){//当前总数刚刚好
cout<<goods_number;//输出当前商品总个数
return 0;//返回
}
}
}
}
求回复!