CodeForces 16B Burglar and Matches

来源:互联网 发布:淘宝上便宜的文具店 编辑:程序博客网 时间:2024/06/06 03:57

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 matchboxes so that the total amount of matches in them is maximal.

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 35 102 53 6
Output
62
Input
3 31 32 23 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 0