原文大概意思是一个小偷有一个容量为n的包包,然后他去偷火柴,火柴盒分布于m个区域,每个区域有ai个火柴盒,每个火柴盒里有bi个火柴。然后要求聪明的你求出这个笨蛋小偷能够拿到多少个火柴。
思路很简单只需要将每个区域的火柴盒进行排序即可,区域中每个火柴盒里火柴多的排在前面。然后使用结构体将两个变量作为一个整体讨论同时便于排序
#include<bits/stdc++.h>
using namespace std;
int n,m;
struct pp{
int a,b;
}i[25];
bool cmp(pp j,pp k){
return j.b>k.b;
}
int main()
{
cin>>n>>m;
for(int c=0;c<m;c++) cin>>i[c].a>>i[c].b;
sort(i,i+m,cmp);
long long ans=0;
for(int c=0;c<m;c++){
if(n>i[c].a){
ans+=i[c].a*i[c].b;
n-=i[c].a;
}else{
ans+=n*i[c].b;
break;
}
}
cout<<ans;
return 0;
}
我是笨蛋