Description
一个工厂要供应n周的酸奶,已知每升酸奶保存一周花费s,每周每升酸奶的造价为c,需求量为y,问满足这n周需求量的最小花费
Input
第一行为两整数n和s,之后n行每行两个整数ci和yi
(1<=n<=10000,1<=s<=100,1<=ci<=5000,1<=yi<=10000)
Output
输出满足这n周需求量的最小花费
Sample Input
4 5
88 200
89 400
97 300
91 500
Sample Output
126900
Solution
贪心,第i周选取前i周中最小花费,开一个变量m记录min(cj+s*(i-j))即可,其中j=1,…,i,注意数据范围,答案要用long long
Code
#include<cstdio>
#include<iostream>
#include<algorithm>
using namespace std;
#define INF 0x3f3f3f3f
typedef long long ll;
int main()
{
int n,s,c,y,m;
ll ans;
while(~scanf("%d%d",&n,&s))
{
ans=0,m=INF;
while(n--)
{
scanf("%d%d",&c,&y);
m=min(m+s,c);
ans+=1ll*m*y;
}
printf("%lld\n",ans);
}
return 0;
}