zoukankan      html  css  js  c++  java
  • codeforces16B

    Burglar and Matches

     CodeForces - 16B 

    A burglar got into a matches warehouse and wants to steal as many matches as possible. In the warehouse there are m containers, in the i-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 nmatchboxes 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 numbers ai and bi (1 ≤ ai ≤ 108, 1 ≤ bi ≤ 10). All the input numbers are integer.

    Output

    Output the only number — answer to the problem.

    Examples

    Input
    7 3
    5 10
    2 5
    3 6
    Output
    62
    Input
    3 3
    1 3
    2 2
    3 1
    Output
    7

    sol:显然取个数多的,然后直接按题意贪心模拟即可
    #include <bits/stdc++.h>
    using namespace std;
    typedef int ll;
    inline ll read()
    {
        ll s=0;
        bool f=0;
        char ch=' ';
        while(!isdigit(ch))
        {
            f|=(ch=='-'); ch=getchar();
        }
        while(isdigit(ch))
        {
            s=(s<<3)+(s<<1)+(ch^48); ch=getchar();
        }
        return (f)?(-s):(s);
    }
    #define R(x) x=read()
    inline void write(ll x)
    {
        if(x<0)
        {
            putchar('-'); x=-x;
        }
        if(x<10)
        {
            putchar(x+'0'); return;
        }
        write(x/10);
        putchar((x%10)+'0');
        return;
    }
    #define W(x) write(x),putchar(' ')
    #define Wl(x) write(x),putchar('
    ')
    const int N=100005;
    int n,m;
    struct Match
    {
        int Ges,Cnt;
    }Box[N];
    inline bool cmp_Cnt(Match p,Match q)
    {
        return p.Cnt>q.Cnt;
    }
    int main()
    {
        int i,ans=0;
        R(n); R(m);
        for(i=1;i<=m;i++)
        {
            R(Box[i].Ges); R(Box[i].Cnt);
        }
        sort(Box+1,Box+m+1,cmp_Cnt);
        for(i=1;i<=m&&n;i++)
        {
            ans+=min(n,Box[i].Ges)*Box[i].Cnt;
            n-=min(n,Box[i].Ges);
        }
        Wl(ans);
        return 0;
    }
    /*
    Input
    7 3
    5 10
    2 5
    3 6
    Output
    62
    
    Input
    3 3
    1 3
    2 2
    3 1
    Output
    7
    */
    View Code
     
  • 相关阅读:
    (转发)storm 入门原理介绍
    shell :将标准输出及标准错误输出写到指定文件
    shell循环(两个日期比较,改变某个特定日期来改变当前比较值)
    MongoDB基本操作
    (转)cenntos 安装mongodb
    通过spark sql 将 hdfs上文件导入到mongodb
    股票实战--线性回归
    Python PIL 的image类和numpy array之间的互换
    根据关键点的脸型的计算
    用反卷积(Deconvnet)可视化理解卷积神经网络还有使用tensorboard
  • 原文地址:https://www.cnblogs.com/gaojunonly1/p/10787440.html
Copyright © 2011-2022 走看看