洛谷 P1376 机器工厂 题解

P1376 机器工厂

题目描述

小T开办了一家机器工厂,在N(N<=10000)个星期内,原材料成本和劳动力价格不断起伏,第i周生产一台机器需要花费Ci(1<=Ci<=5000)元。若没把机器卖出去,每保养一台机器,每周需要花费S(1<=S<=100)元,这个费用不会发生变化。

机器工厂接到订单,在第i周需要交付Yi(0<=Yi<=10^4)台机器给委托人,第i周刚生产的机器,或者之前的存货,都可以进行交付。

请你计算出这n周时间内完成订单的最小代价。

输入格式

第一行输入两个整数N和S,接下来N行输入Ci和Yi

输出格式

输出一个整数,表示最少的代价

输入输出样例

输入 #1

4 5
88 200
89 400
97 300
91 500

输出 #1

126900

说明/提示

时限1S,空间256MB

【思路】

贪心
这个题很好想
枚举到了第i月,如果前面有某一个月
制造出机器的成本 + 到达第i天保养得花费
是小于在第i个月直接造出来花费的成本的
那就可以替换掉
所以这就很显然了吗
直接从第一个开始枚举
记录目前建造机器需要花费的最小值
不过这个最小值是每过一个月就需要加上s
这个时候在和枚举到的那个月份需要造一台机子花费
比较一下
还是记录最小的

通过上面
我们可以求出每个月份的造价最低是多少
这样就可以求出总共的最优解
注意需要开long long 哦

【完整代码】

#include<iostream>
#include<cstdio>

using namespace std;
int c,y;
long long ans = 0;
int main()
{
	int n,s;
	cin >> n >> s;
	int last;
	for(int i = 1;i <= n;++ i)
	{
		cin >> c >> y;
		if(i == 1)last = c;
		else	last = min(last + s,c);
		ans += last * y;
	}
	cout << ans << endl;
	return 0;
}
posted @ 2019-10-07 17:47  acioi  阅读(555)  评论(1编辑  收藏  举报