题目描述
小 F 是一个狂热的黄金爱好者,所以他决定每天积攒固定重量的黄金,若第 i 天他积攒的黄金重量不少于 ai 克,小 F 就会感到开心,但是黄金的价格每天都会变动,在第 i 天,黄金的价格为 qi 每克。现在已知 a1,...,an 和 q1,...,qn。在每一天,小 F 可以购买任意重量的黄金,当天买入的黄金也可以留到后面的天来积攒(可以理解为存入仓库),请你帮助小 F 计算一下他至少需要花费多少钱才能在这 n 天都保持开心。
数据范围:1≤n≤105,1≤ai,qi≤100
输入格式
第一行输入一个正整数 n,表示天数。
第 2∼n+1 行每行输入两个正整数 ai,qi,表示当天小 F 的黄金积攒需求量以及当天黄金的价格。
输出格式
一个整数,即使小 F 在这 n 天始终保持开心的最小花费。
输入样例#1
3
1 3
2 2
3 1
输出样例#1
10
输入样例#2
3
1 3
2 1
3 2
输出样例#2
8
样例解释
对于样例一,一种可行的方案是在第一、二、三天分别购买 1、2、3 克黄金。
对于样例二,一种可行的方案是在第一天购买 1 克黄金,第二天购买 5 克黄金(2 克用于第二天积攒,3 克用于第三天积攒)。
代码长度限制
16 KB
时间限制
400 ms
内存限制
64 MB
int a[N], b[N];
int main()
{
int n;
cin >> n;
for (int i = 0; i < n; i++)
{
cin >> a[i] >> b[i];
}
long long sum = 0, d = 0,m = a[0],fm=b[0];//注意初始值
for (int i = 0; i < n; i++)
{
if (fm > b[i]||i==n-1)
{
sum += m * fm;
fm = b[i];
m = a[i];
}
else
{
m += a[i];
}
}
cout << sum << endl;
return 0;
}