Poj 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.
来源

USACO 2005 March Gold


题目意思:

一个生产酸奶的工厂,每天生产的量是任意的,但牛奶的原料的价格是波动的,如88 89 97,有固定的存储成本S,

每天运输的量也是给定的,如200,400,300, 500等等。 

让你设计一个方案让生产和存储的成本最小。


思路:

贪心法去解,只考虑相邻两天的价格差值,这个价格差值可以设计为第一天的牛奶成本 和第二天的成本加存储价格 的差值,若差值小于0

让酸奶在第一天生产,否则在第二条生产。

实现:

实现起来简单的考虑即可,自己之前写的太复杂。

由于只考虑相邻的天,可以在读入的时候进行计算,设一个变量  min 用来保存上一次(第一天)的成本价格,若min + S(存储价格)< 当前的

cost,就把当前的cost 设为min + S ,进行求和计算,记住最后更新 min。


AC code:

#include<iostream>
#include<vector>
using namespace std;
int main(){
	//freopen("C.txt","r",stdin);
	int cost,t;
	long long total_cost = 0;
	long N,S;
	cin >> N >> S;
	int cur_c;
	int min = 10000;
	while(N--){
		cin >> cost >> t;
		if(cost > min + S) cost = min + S;
		total_cost += cost * t;
		min = cost ;	
		}
	cout<<total_cost<<endl;		
	return 0;
}









  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值