挑戰程序設計競賽 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;
}
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章