描述
小明所在的班级要说加联欢晚会,作为班长,小明要去购买m个气球来装饰教
室,为可降低花费,小明一共调重了n家店,已知每家商店的气球单价以及
最多能提供的而球数量,请计算小明购买m个气球的最小花是多少?
输入描述
共n+1行;
第一行包含两个整数n和m,分别表示商店的数量以及要购买的气球数量,整数之间以一个空格隔开,接下来n行,每行包含两个整数ai和bi,分别表示第i家商店的气球单价以及能提供的气球教量,整教之间以一个空格隔开。
数据范围:
测试点
1-10: 1<=n<=100, 1<=m,bi<=1000 , 1<=ai<=100。
输入教据保证所有商店的气球教量的气球数量之和大于m。
输出描述
一个整数,表示小明购买 m 个气球的最小花费。
用例输入 1
3 100 5 40 8 60 2 30
用例输出 1
500
基本思路:结构体排序得最优解,直接上代码!!! :
#include<bits/stdc++.h>
using namespace std;
struct node{
int p;
int c;
}a[105];
int n,m;
bool cmp(node x,node y){
return x.p<y.p;
}
int cnt,z;
int main(){
cin>>n>>m;
for(int i=0;i<n;i++){
cin>>a[i].p>>a[i].c;
}
sort(a,a+n,cmp);
for(int i=0;i<n;i++){
if(a[i].c>=m){
cnt+=m*a[i].p;
break;
}else {
cnt+=a[i].c*a[i].p;
m-=a[i].c;
}
}
cout<<cnt;
return 0;
}