【解题报告】【USACO】酸奶工厂

Title酸奶工厂

Description

         奶牛经营了一家酸奶工厂,生意非常红火。在接下去的 N 个月里,第 i 个月需要向社会提供 A i 吨酸奶。酸奶的生产受到很多因素的影响,所以每个月的生产成本是变化的,其中第 i 个月的成本是 每吨 C i 元。
      奶牛可以提前里把酸奶做好,存在仓库里,等需要的时候再拿出来卖。存储在仓库里的酸奶,每 吨酸奶存放一个月需要支付 S 元的维护费用,存放的时间可以任意长。假设工厂的产量是无限的,存 储酸奶的仓库也是无限大的。请问为了满足订单的需要,奶牛生产这些酸奶最少要花多少钱?

Input Format

  • 第一行:两个整数 N 和 S,1 ≤ N ≤ 10000, 1 ≤ S ≤ 100
  • 第二行到第 N + 1 行:第 i + 1 行有两个整数 C i 和 A i ,1 ≤ C i ≤ 5000, 1 ≤ A i ≤ 10000

Output Format

单个整数:表示生产酸奶的最小总费用

Sample Input

4 5 
88 200
89 400
97 300
91 500

Sample Output

126900

Hint

第一个月生产 200 吨酸奶;第二个月生产吨酸奶,并存下 300 吨;第三个月不生产酸奶;第三个月生产 500 吨

Source

Yogurt factory, USACO 2005 Mar

Analysis

     
       算法:贪心
     
       简析:当第i月的酸奶保存到第j月的单位维护费+单位成本(i<=j)小于第j月的单位成本,则选取i月的酸奶填充j月较优
                 当第i月的酸奶保存到第j月的单位维护费+单位成本(i<=j)大于等于第j月的单位成本,则用第j月的酸奶来填充之后月份的酸奶会比用第i月的                  更优【因为成本已经固定,每月的维修费是一样的】(i
       做法:用now记录前i-1个月的最优单位费用(每个月累加s),若比第i月的单位费用大则替换。 计算入答案
   
       注意:now和ans可能超出longint范围,使用long long
       
       复杂度:O(n)

Code

     
//USACO 酸奶工厂 贪心 
//错误:1: 数据范围,now,ans(long long)
//错误  2:  long long输出时是lld  
#include
int n,s,c,a;
long long now=10000000,ans=0;
int main()
{
	scanf("%d%d",&n,&s);
	for (int i=1;i<=n;i++)
	{
		scanf("%d%d",&c,&a);
		if (now>c) now=c;
		ans+=now*a;
		now+=s;
	}
	printf("%lld",ans);
    return 0;
}


你可能感兴趣的:(【解题报告】【USACO】酸奶工厂)