• pku2363 Yogurt factory


    每周要供应一定数目的奶酪,但是每周的生产成本可能会变化,而存储成本不会变化,问如何生产代价最低。

    Sample Input

    4 5
    88 200
    89 400
    97 300
    91 500

    Sample Output

    126900

    Hint

    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.

     

    贪心问题,有可能某周多生产,下周不生产,因为下周的生产成本太大,以至于宁可多存储一天,甚至两天,三天....。

    事实上某周多生产,可以还是看成是在下一周生产,只是我们用等价生产成本来看,

    本周等价生产成本 = min(上一周的等价生产成本+存储一周的成本,  这周的生产成本)

    如果

    存储成本为5

    第一周生产成本80,第二周86,第三周92

    那么其实应该第一周生产完这三周的供应量。相当与第一周等价生产成本80,第二周等价生产成本85,第三周90.随着输入,扫描处理一遍即可得到最优解。

    不过下面的程序比较耗时,似乎是用cout,cin的关系,用printf,scanf会快很多。

     1 #include <iostream>
     2 using namespace std;
     3 
     4 void GetMinCost()
     5 {
     6     long long cost = 0;
     7     int weekNum, makeCost, storeCost, supplyNum;
     8     cin >> weekNum >> storeCost;
     9     int preMakeCost, minCost;
    10     //the first week
    11     cin >> makeCost >> supplyNum;
    12     cost += makeCost * supplyNum;
    13     preMakeCost = makeCost + storeCost;
    14     //other weeks
    15     for (int i = 1; i < weekNum; i++) {
    16         cin >> makeCost >> supplyNum;
    17         minCost = min(preMakeCost, makeCost);
    18         cost += minCost * supplyNum;
    19         preMakeCost = minCost + storeCost;
    20     }
    21 
    22     cout << cost << endl;
    23 }
    24 
    25 int main(int argc, char *argv[])
    26 {
    27     GetMinCost();
    28     return 0;
    29 }


  • 相关阅读:
    集合的代数运算
    集合的代数运算
    poj1639 Picnic Planning,K度限制生成树
    C/C++学习站点资源
    Mustache 使用心得总结
    PostgreSQL服务端监听设置及client连接方法
    【线性规划与网络流24题】汽车加油行驶问题 分层图
    linux系统下信号具体解释2
    【数据结构】栈-数组的实现
    EJB究竟是什么,真的那么神奇吗??
  • 原文地址:https://www.cnblogs.com/rocketfan/p/1569953.html
Copyright © 2020-2023  润新知