0
点赞
收藏
分享

微信扫一扫

CodeForces 16B Burglar and Matches

Go_Viola 2022-11-10 阅读 168


Description



A burglar got into a matches warehouse and wants to steal as many matches as possible. In the warehouse there are m containers, in thei-th container there are ai matchboxes, and each matchbox contains bi matches. All the matchboxes are of the same size. The burglar's rucksack can hold n matchboxes exactly. Your task is to find out the maximum amount of matches that a burglar can carry away. He has no time to rearrange matches in the matchboxes, that's why he just chooses not more than n


Input



The first line of the input contains integer n (1 ≤ n ≤ 2·108) and integer m (1 ≤ m ≤ 20). The i + 1-th line contains a pair of numbersai and bi (1 ≤ ai ≤ 108, 1 ≤ bi ≤ 10). All the input numbers are integer.


Output



Output the only number — answer to the problem.


Sample Input



Input



7 3
5 10
2 5
3 6



Output



62



Input



3 3
1 3
2 2
3 1



Output



7

简单贪心

#include<iostream>
#include<cstdlib>
#include<cstring>
#include<cstdio>
#include<cmath>
#include<vector>
#include<string>
#include<queue>
#include<map>
#include<algorithm>
using namespace std;
const int maxn=1e3+10;
int n,m;

struct point
{
int x,y;
void read(){scanf("%d%d",&x,&y);}
bool operator<(const point&a)const{return y>a.y;}
}a[maxn];

int main()
{
while(~scanf("%d%d",&n,&m))
{
for (int i=0;i<m;i++) a[i].read();
sort(a,a+m);
int ans=0;
for (int i=0;i<m;i++)
{
if (n>=a[i].x) {ans+=a[i].x*a[i].y; n-=a[i].x;}
else {ans+=n*a[i].y; n=0;}
}
printf("%d\n",ans);
}
return 0;
}



举报

相关推荐

0 条评论