• BZOJ1680: [Usaco2005 Mar]Yogurt factory


    【传送门:BZOJ1680


    简要题意:

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


    输入格式:

      • 第一行:两个整数N 和S,1 ≤ N ≤ 10000, 1 ≤ S ≤ 100

      • 第二行到第N + 1 行:第i + 1 行有两个整数Ci 和Ai,1 ≤ Ci ≤ 5000, 1 ≤ Ai ≤ 10000


    输出格式:

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


    样例输入:

    4 5

    88 200

    89 400

    97 300

    91 500


    样例输出:

    126900


    样例解释:

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


    题解:

      贪心,p[i]表示第i个月的成本(包括存放的成本),那么我们在处理p[i]的时候,保证p[i-1]是最小成本,那么p[i]=min(p[i-1]+s,c[i])


    参考代码:

    #include<cstdio>
    #include<cstring>
    #include<algorithm>
    #include<cstdlib>
    #include<cmath>
    using namespace std;
    typedef long long LL;
    int c[11000],a[11000],p[11000];
    int main()
    {
        int n,s;
        scanf("%d%d",&n,&s);
        for(int i=1;i<=n;i++) scanf("%d%d",&c[i],&a[i]);
        LL ans=0;
        p[0]=999999999;
        for(int i=1;i<=n;i++)
        {
            p[i]=min(p[i-1]+s,c[i]);
            ans+=p[i]*a[i];
        }
        printf("%lld
    ",ans);
        return 0;
    }

     

  • 相关阅读:
    [小知识]如何查看IIS6应用程序池所对应的进程ID
    继续向大家汇报服务器情况
    CNBlogs DotText 1.0 Beta 2 重要更新
    垃圾广告记录
    Firefox 11正式发布
    Firefox 10正式发布
    Firefox 6 正式发布
    Firefox 5 正式发布
    Firefox 9正式发布
    Firefox 8正式发布
  • 原文地址:https://www.cnblogs.com/Never-mind/p/7742740.html
Copyright © 2020-2023  润新知