2393:Yogurt factory

总时间限制: 
1000ms

内存限制: 
65536kB
描述
The cows have purchased a yogurt factory that makes world-famous Yucky Yogurt. Over the next N (1 <= N <= 10,000) weeks, the price of milk and labor will fluctuate weekly such that it will cost the company C_i (1 <= C_i <= 5,000) cents to produce one unit of yogurt in week i. Yucky's factory, being well-designed, can produce arbitrarily many units of yogurt each week.

Yucky Yogurt owns a warehouse that can store unused yogurt at a constant fee of S (1 <= S <= 100) cents per unit of yogurt per week. Fortuitously, yogurt does not spoil. Yucky Yogurt's warehouse is enormous, so it can hold arbitrarily many units of yogurt.

Yucky wants to find a way to make weekly deliveries of Y_i (0 <= Y_i <= 10,000) units of yogurt to its clientele (Y_i is the delivery quantity in week i). Help Yucky minimize its costs over the entire N-week period. Yogurt produced in week i, as well as any yogurt already in storage, can be used to meet Yucky's demand for that week.
输入
* Line 1: Two space-separated integers, N and S.

* Lines 2..N+1: Line i+1 contains two space-separated integers: C_i and Y_i.
输出
* Line 1: Line 1 contains a single integer: the minimum total cost to satisfy the yogurt schedule. Note that the total might be too large for a 32-bit integer.
样例输入
4 5
88 200
89 400
97 300
91 500
样例输出
126900
提示
OUTPUT DETAILS:
In week 1, produce 200 units of yogurt and deliver all of it. In week 2, produce 700 units: deliver 400 units while storing 300 units. In week 3, deliver the 300 units that were stored. In week 4, produce and deliver 500 units.
【题目大意】 

有一个制作酸奶的工厂,需要在接下来的N(1<=N<=10000)周里
生产酸奶,第i周的成本为Ci(1<=Ci<=5000),工厂有一个无限大的仓库可
以存储生产好了的酸奶,并且这些酸奶不会过期,可以一直存储,但是存
储每单位酸奶每周要花费S(1<=S<=100)。计算:要满足条件:工厂第i周必
须送出Yi(1<=Yi<=10000)单位的酸奶(可以从仓库中送出,也可以本周生产),
最小花费是多少?

【样例说明】:第一周生产200单位酸奶并且全部送出;第二周,生产700单位:送出400,存储300; 第三周,送出第二周存储的300单位; 第四周,生产500单位并全部送出。

【题目分析】 第i周的酸奶可以是任意小于i的周生产的。于是如果第i周的酸奶在第j(i>j)周生产,相当于这酸奶在第j周生产,并且花费是第i周的成本加上(i-j)周的储存费用。

第i周的最小花费是可以由第i-1周的最小花费推出的:mincost(i) = min( mincost(i-1)+s,Ci );而第一周的最小成本就是C1,因为第一周的酸奶只能第一周生产。

于是从第一周开始可以逐步推出所有周的最小花费:

  

1 for( int i=1; i<=N-1; i++ ) {
2 week[i].C = min( week[i-1].C+S,week[i].C );
3 //i推i+1,到N-1时就已经推出N了 N单独处理就行了
4 }

关于数据范围:最坏的情况是,有10000周,每周都需要送出10000单位酸奶,
并且每周的成本都是5000.在这种情况下,共需要10000*5000*10000=5e+11的花费。
所以使用long long 就可以了。

【代码】

 1 #include <iostream>
2 #include <algorithm>
3 using namespace std;
4
5 const int maxn = 10010;
6
7 struct _week
8 {
9 int C;
10 int Y;
11 };
12 _week week[maxn];
13 int N,S;
14
15 int main()
16 {
17 cin >> N >> S;
18 long long totalcost = 0;
19 for( int i=1; i<=N; i++ ) {
20 cin >> week[i].C >> week[i].Y;
21 }
22
23 //推出2到N-1周的最小花费同时计算总费用
24 for( int i=1; i<=N-1; i++ ) {
25 totalcost += week[i].C * week[i].Y;
26 week[i+1].C = min( week[i].C+S,week[i+1].C );
27 }
28
29 //总费用加上最后一周(第N周)的花费
30 totalcost += week[N].C * week[N].Y;
31 cout << totalcost << endl;
32 return 0;
33 }

百炼 POJ2393:Yogurt factory【把存储费用用递推的方式表达】的更多相关文章

  1. POJ2393 Yogurt factory 【贪心】

    Yogurt factory Time Limit: 1000MS   Memory Limit: 65536K Total Submissions: 6821   Accepted: 3488 De ...

  2. poj2393 Yogurt factory(贪心,思考)

    https://vjudge.net/problem/POJ-2393 因为仓储费是不变的. 对于每一周,要么用当周生产的,要么接着上一周使用的价格(不一定是输入的)加上固定的仓储费用. 应该算是用到 ...

  3. POJ-2393 Yogurt factory 贪心问题

    题目链接:https://cn.vjudge.net/problem/POJ-2393 题意 有一个生产酸奶的工厂,还有一个酸奶放在其中不会坏的储存室 每一单元酸奶存放价格为每周s元,在接下来的N周时 ...

  4. poj-2393 Yogurt factory (贪心)

    http://poj.org/problem?id=2393 奶牛们有一个工厂用来生产奶酪,接下来的N周时间里,在第i周生产1 单元的奶酪需要花费ci,同时它们也有一个储存室,奶酪放在那永远不会坏,并 ...

  5. poj2393 Yogurt factory

    思路: 贪心. 实现: #include <iostream> #include <cstdio> #include <algorithm> using names ...

  6. POJ 2393 Yogurt factory 贪心

    Description The cows have purchased a yogurt factory that makes world-famous Yucky Yogurt. Over the ...

  7. BZOJ 1740: [Usaco2005 mar]Yogurt factory 奶酪工厂 贪心 + 问题转化

    Description The cows have purchased a yogurt factory that makes world-famous Yucky Yogurt. Over the ...

  8. poj 2393 Yogurt factory

    http://poj.org/problem?id=2393 Yogurt factory Time Limit: 1000MS   Memory Limit: 65536K Total Submis ...

  9. BZOJ1680: [Usaco2005 Mar]Yogurt factory

    1680: [Usaco2005 Mar]Yogurt factory Time Limit: 5 Sec  Memory Limit: 64 MBSubmit: 106  Solved: 74[Su ...

随机推荐

  1. python多进程、多线程服务器和客户端的简单实现

    使用了多进程的服务器: from SocketServer import TCPServer, ForkingMixIn, ThreadingMixIn, StreamRequestHandler c ...

  2. Morgan Stanley Books List:经典金融书籍推荐

    一.经济学 1. 中华帝国的专制制度,佛朗索瓦.魁奈 2. 资本论(共3卷),马恩全集 3. 国家竞争优势,麦克尔.波特 4. Essentials of corporate analysis, by ...

  3. Linux x86_64与i386区别之 —— 内存寻址

    毫无疑问,不管是32位,还是64位处理器,所有进程(执行的程序)都必须占用一定数量的内存,它或是用来存放从磁盘载入的程序代码,或是 存放取自用户输入的数据等等.不过进程对这些内存的管理方式因内存用途不 ...

  4. 【BUAA软工】Visual Lab Online——功能规格说明书

    项目 内容 班级:北航2020春软件工程 博客园班级博客 作业:明确和撰写软件的功能规格说明书 功能规格说明书 当前版本:v1.0 修订历史: 版本号 修订时间 修订说明 v1.0 2020/04/0 ...

  5. MSSQL·备份数据库中的单表

    阅文时长 | 0.11分钟 字数统计 | 237.6字符 主要内容 | 1.引言&背景 2.声明与参考资料 『MSSQL·备份数据库中的单表』 编写人 | SCscHero 编写时间 | 20 ...

  6. [bug] Openresty:content_by_lua_file 404

    参考 http://www.javaear.com/question/28087228.html https://github.com/openresty/openresty.org/issues/1 ...

  7. [c++] 文件包含

    当一个类用到另一个类时,有两种包含方式,在.h中包含和在.cpp中包含 用到公共类库时,在.h文件中包含(公共类库可视为不变的) 用到项目开发过程中自己或同事写的类时,在.cpp文件中包含(可能根据需 ...

  8. [c++] 分号的使用

    加分号的情况: 语句结束加分号(否则编译器不知道在哪里结束语句,编译器不识别换行,写代码时换行和退格只是为了看着舒服,但本质上代码是写给编译器看的) 声明语句后加分号(也是一种语句) 结构体.类定义后 ...

  9. python中类属性和数据属性的解释

    python中的类叫class object,类的实例叫instance object. 类 Class Objects 类拥有两种操作,1.类属性 attribute references 2.实例 ...

  10. IT菜鸟之虚拟机VMware的使用

    虚拟机安装完成了,以下是虚拟机的使用. 双击快捷方式,打开vmware虚拟机. 点击创建新虚拟机,这里可以选择创建方式,可以点击典型并一路下一步创建,我们这里讲自定义创建. 这里选择兼容版本,大家可以 ...