挑战程序设计竞赛 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个奶酪,一半本周生产一半之前生产保存的情况)
我们每周进行比较 之前生产保存的和本周生产 哪个成本最低就选择那种生产流程。每周生成的最低成本 = min( 之前生产保存到本周成本,本周直接生成的成本)
而第i-1周得到的成本最低 也是第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;
}
作 者: itdef
欢迎转帖 请保持文本完整并注明出处
技术博客 http://www.cnblogs.com/itdef/
B站算法视频题解
https://space.bilibili.com/18508846
qq 151435887
gitee https://gitee.com/def/
欢迎c c++ 算法爱好者 windows驱动爱好者 服务器程序员沟通交流
如果觉得不错,欢迎点赞,你的鼓励就是我的动力
欢迎转帖 请保持文本完整并注明出处
技术博客 http://www.cnblogs.com/itdef/
B站算法视频题解
https://space.bilibili.com/18508846
qq 151435887
gitee https://gitee.com/def/
欢迎c c++ 算法爱好者 windows驱动爱好者 服务器程序员沟通交流
如果觉得不错,欢迎点赞,你的鼓励就是我的动力
![阿里打赏](https://files.cnblogs.com/files/itdef/ali2.bmp)
![微信打赏](https://files.cnblogs.com/files/itdef/weixin2.bmp)