题目描述
小 T 开办了一家机器工厂,在 NN个星期内,原材料成本和劳动力价格不断起伏,第 ii 周生产一台机器需要花费 C_iC
i
元。若没把机器卖出去,每保养一台机器,每周需要花费 SS 元,这个费用不会发生变化。
机器工厂接到订单,在第 ii 周需要交付 Y_iY
i
台机器给委托人,第 ii 周刚生产的机器,或者之前的存货,都可以进行交付。
请你计算出这 nn 周时间内完成订单的最小代价。
输入格式
第一行输入两个整数 NN 和 SS,接下来 NN 行每行两个数 C_iC
i
和 Y_iY
i
。
输出格式
输出一个整数,表示最少的代价。
输入输出样例
输入 #1复制
4 5
88 200
89 400
97 300
91 500
输出 #1复制
126900
说明/提示
1\leq n\leq 10^41≤n≤10
4
,1 \le C_i \le 50001≤C
i
≤5000,1 \le S\le 1001≤S≤100,0\le Y_i\le 10^40≤Y
i
≤10
4
。
上代码:
#include<cstdio>
#include<iostream>
using namespace std;
long long ans,sum,tmp,f,n,s;//记得开long long,不然爆
int main(){//过程华丽开始
scanf("%lld%lld",&n,&s);//这两个其实可以不用%lld,但是用了保险一点,不易错
scanf("%d%d",&sum,&tmp);//先把第一个单独做了,就它例外
ans+=sum*tmp;//必须直接生产,别无他法
f=sum;//这是一个存最小数的变量,这就是贪心,新手自动理解为min
for(int i=2;i<=n;i++){//开始循环,边读边做
scanf("%d%d",&sum,&tmp);//在线读入
if(f+s<sum)f=f+s;//判断f+s是否比当前值小,如果小,就不变,加一个s维修费
else f=sum;//如果大就用当前值做
ans+=f*tmp;
}
printf("%lld\n",ans);//完美输出
return 0;//过程华丽结束
}