2016 Winter Training Day #1_B题_codefcrces 588A(贪心)

来源:互联网 发布:java date 加一个月 编辑:程序博客网 时间:2024/04/29 13:17
A. Duff and Meat
time limit per test
1 second
memory limit per test
256 megabytes
input
standard input
output
standard output

Duff is addicted to meat! Malek wants to keep her happy for n days. In order to be happy in i-th day, she needs to eat exactly aikilograms of meat.

There is a big shop uptown and Malek wants to buy meat for her from there. In i-th day, they sell meat for pi dollars per kilogram. Malek knows all numbers a1, ..., an and p1, ..., pn. In each day, he can buy arbitrary amount of meat, also he can keep some meat he has for the future.

Malek is a little tired from cooking meat, so he asked for your help. Help him to minimize the total money he spends to keep Duff happy for n days.

Input

The first line of input contains integer n (1 ≤ n ≤ 105), the number of days.

In the next n lines, i-th line contains two integers ai and pi (1 ≤ ai, pi ≤ 100), the amount of meat Duff needs and the cost of meat in that day.

Output

Print the minimum money needed to keep Duff happy for n days, in one line.

Sample test(s)
input
31 32 23 1
output
10
input
31 32 13 2
output
8
Note

In the first sample case: An optimal way would be to buy 1 kg on the first day, 2 kg on the second day and 3 kg on the third day.

In the second sample case: An optimal way would be to buy 1 kg on the first day and 5 kg (needed meat for the second and third day) on the second day.



题意:有n组数据,每组第一个ai为第i天需要的肉的数量,第二个pi为第i天肉的单价,可以在某一天先买了未来的肉存起来。问需要的最小总金额。

思路:简单贪心,维护价格,求到第k天为止,价格的最小值。如p[0.....5]为   5 6 2 1 6 7   则  处理为   5 5 2 1 1 1(因为可以先把未来的肉买了存起来,所以在遇到比第k天更低的价格前,可以按照第k天的价格购买。但是如果不是一次性给出每一天的价格,则不可以这样做。)。

代码:
#include <iostream>#include <cstdio>#include <cstring>#include <string>#include <algorithm>#include <vector>#include <queue>#include <stack>#include <cmath>#include <map>#include <set>using namespace std;const int INF = 0x7fffffff;int a[100050];int p[100050];int m[100050];int main(){    int n;    cin >> n;    for(int i = 0; i < n; ++i)    {        cin >> a[i] >> p[i];    }    int minn = INF;    for(int i = 0; i < n; ++i)    {        minn = min(p[i], minn);        p[i] = minn;        //cout << p[i] << " ";    }    int sum = 0;    for(int i = 0; i < n; ++i)    {        sum += (p[i]*a[i]);    }    cout << sum << endl;    return 0;}


0 0
原创粉丝点击