题意:中文题面,不需要解释了。
思路:按金钱大小,从小到大排序即可。
AC代码:
#include<bits/stdc++.h> using namespace std; const int maxn = 5010; struct Node{ int x,y; }node[maxn]; bool cmp(Node a,Node b){ return a.x < b.x; } int main(void){ int n,m; cin>>n>>m; for(int i = 1; i <= m; i++){ cin>>node[i].x>>node[i].y; } sort(node+1,node+1+m,cmp); int sum = 0; for(int i = 1; i <= m; i++){ if(n>=node[i].y){ sum += node[i].x*node[i].y; n -= node[i].y; } else{ sum += n*node[i].x; break; } } cout<<sum<<endl; return 0; }