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

来源:互联网 发布:匡恩网络上市 编辑:程序博客网 时间:2024/04/27 20:55

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 20089 40097 30091 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<j<=k)
       做法:用now记录前i-1个月的最优单位费用(每个月累加s),若比第i月的单位费用大则替换。 计算入答案
   
       注意:now和ans可能超出longint范围,使用long long
       
       复杂度:O(n)

Code

     
<span style="font-size:18px;"><span style="font-size:18px;"><span style="font-family:SimHei;font-size:18px;">//USACO 酸奶工厂 贪心 //错误:1: 数据范围,now,ans(long long)//错误  2:  long long输出时是lld  #include<cstdio>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;}</span></span></span>


0 0