zoukankan      html  css  js  c++  java
  • 奶酪工厂

    接下来的N(1≤N10000)星期中,奶酪工厂在第i个星期要花C_i分来生产一个单位的奶酪。约克奶酪工厂拥有一个
    无限大的仓库,每个星期生产的多余的奶酪都会放在这里。而且每个星期存放一个单位的奶酪要花费S分。工厂最
    近收到了客戶N个星期的订单,第i个星期要向客戶提供Y_i 个单位的奶酪。当然这些奶酪可以在第i个星期时生产
    ,也可以从仓库中拿取。采用怎样的生产策略约克奶酪工厂的花费最小呢?
    Input
    第一行两个整数:N和S;接下来的N行中,第i行的两个数表示:C_i和Y_i。
    Output
    仅一行,即工厂生产的最小花费
    Sample Input
    4 5
    88 200
    89 400
    97 300
    91 500
    Sample Output
    126900

    Sol:分析第i月奶酪的价格,它有两种情况,一是第i个月自己生产,二是由1~i-1个月中某个月的奶酪价格+存储费用保留下来。如下面的样例,设第i月价格为now

    88 200   第一月自己生产,now=c[1]=88,计算后now更新为now+s,now=93,看下个月是否用这个价格生产。
    89 400   now>c[2],即93>89,所以第2月自己生产,now=89,计算后now更新为94。
    97 300   now<c[3],即94<97,所以第3月用上月的价格生产存储,now=94,计算后now更新为99。
    91 500   now>c[4],即99>91,所以第4月自己生产,now=91。

    由上可知,贪心策略根据条件选择,如果上月的价格+存储价格<当月自己生产价格,则选择前面某月生产存储,否则当月自己生产。

     1 #include<cstdio>
     2 int n,s,c,a;
     3 long long now=10000000,ans=0;
     4 int main()
     5 {
     6     scanf("%d%d",&n,&s);//n个月,保管费用为s 
     7     for (int i=1;i<=n;i++)
     8     {
     9         scanf("%d%d",&c,&a);//当月的成本为c,需求量为a 
    10         if (now>c) //如果从[1,i-1]这一段某个月生产的成本高于本月的 
    11             now=c;//本月自己生产奶酪 
    12         ans+=now*a;
    13         now+=s;//累加储存成本 
    14     }
    15     printf("%lld",ans);
    16     return 0;
    17 }
  • 相关阅读:
    Android(java)学习笔记15:匿名内部类实现多线程
    Android(java)学习笔记14:Java线程池
    Android(java)学习笔记13:线程组的概述和使用
    Android(java)学习笔记12:线程的状态转换图以及常见执行情况
    win2012R2打Windows8.1-KB2919355 问题
    win2012R2打Windows8.1-KB2919355 问题
    P2404
    P2404
    P2404
    抽签
  • 原文地址:https://www.cnblogs.com/cutepota/p/12144170.html
Copyright © 2011-2022 走看看