挑战程序设计竞赛 2.2 poj 2393 Yogurt factory

https://vjudge.net/problem/POJ-2393

奶牛们购买了一家酸奶厂,生产世界闻名的 "Yucky Yogurt "酸奶。在接下来的 N (1 <= N <= 10,000) 周里,牛奶和劳动力的价格每周都会波动,
因此在第 i 周生产一单位酸奶将花费公司 C_i (1 <= C_i <= 5,000) 美分。
Yucky 酸奶厂设计合理,每周可以生产任意多单位的酸奶。

Yucky 酸奶公司拥有一个仓库,可以储存未使用的酸奶,每周每单位酸奶的固定费用为 S(1 <= S <= 100)美分。
幸运的是,酸奶不会变质。Yucky Yogurt 的仓库很大,可以存放任意数量的酸奶。

Yucky 想找到一种方法,每周向客户配送 Y_i (0 <= Y_i <= 10,000)单位的酸奶(Y_i 是第 i 周的配送量)。
请帮助 Yucky 公司在整个 N 周期间尽量降低成本。第 i 周生产的酸奶和已储存的酸奶可用于满足 Yucky 在该周的需求。
输入
* 第 1 行 两个空格分隔的整数 N 和 S。

* 第 2...N+1 行: 第 i+1 行包含两个空格分隔的整数: C_i 和 Y_i。
输出
* 第 1 行: 第 1 行包含一个整数:满足酸奶计划的最小总成本。请注意,对于 32 位整数来说,总成本可能过大。


4 5
88 200
89 400
97 300
91 500


126900

输出详情:
第 1 周,生产 200 件酸奶并全部交付。第 2 周,生产 700 个单位:交付 400 个单位,同时储存 300 个单位。
第 3 周,交付已储存的 300 个单位。第 4 周,生产并交付 500 个单位。

解答
我们主要关心当前情况下 之前的奶酪保存到现在
和本周生产的单价哪个更便宜(因为所有奶酪要选择最便宜的流程,不存在要求100个奶酪,一半本周生产一半之前生产保存的情况)
我们每周进行比较 之前生产保存的和本周生产 哪个成本最低就选择那种生产流程。
而第i周得到的成本最低 也是下一周的生产保存的最低成本
i周的生产保存的最低成本 = i-1周的生产保存的最低成本 + 周保存的成本
所以每周生成的最低成本 = min(i-1周的生产保存的最低成本 + 周保存的成本, 本周直接生成的成本)

代码如下

#include <iostream>

using namespace std;
//https://vjudge.net/problem/POJ-2393

const int N = 10010;
int C[N], Y[N];
int n, s;
long long ans = 0;


int main()
{
	cin >> n >> s;
	for (int i = 1; i <= n; i++) {
		cin >> C[i] >> Y[i];
	}

	int currCost = 0x3f3f3f3f;
	for (int i = 1; i <= n; i++) {
		currCost = min(currCost + s, C[i]);
		ans += currCost * Y[i];
	}

	cout << ans << endl;

	return 0;
}
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章