• POJ2393 Yogurt factory 【贪心】


    Yogurt factory
    Time Limit: 1000MS   Memory Limit: 65536K
    Total Submissions: 6821   Accepted: 3488

    Description

    The cows have purchased a yogurt factory that makes world-famous Yucky Yogurt. Over the next N (1 <= N <= 10,000) weeks, the price of milk and labor will fluctuate weekly such that it will cost the company C_i (1 <= C_i <= 5,000) cents to produce one unit of yogurt in week i. Yucky's factory, being well-designed, can produce arbitrarily many units of yogurt each week. 

    Yucky Yogurt owns a warehouse that can store unused yogurt at a constant fee of S (1 <= S <= 100) cents per unit of yogurt per week. Fortuitously, yogurt does not spoil. Yucky Yogurt's warehouse is enormous, so it can hold arbitrarily many units of yogurt. 

    Yucky wants to find a way to make weekly deliveries of Y_i (0 <= Y_i <= 10,000) units of yogurt to its clientele (Y_i is the delivery quantity in week i). Help Yucky minimize its costs over the entire N-week period. Yogurt produced in week i, as well as any yogurt already in storage, can be used to meet Yucky's demand for that week.

    Input

    * Line 1: Two space-separated integers, N and S. 

    * Lines 2..N+1: Line i+1 contains two space-separated integers: C_i and Y_i.

    Output

    * Line 1: Line 1 contains a single integer: the minimum total cost to satisfy the yogurt schedule. Note that the total might be too large for a 32-bit integer.

    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. 

    Source

    每次更新相邻的下一周就可以。由于若下一周被更新,那么下一周能够用来更新剩下的周,所以当前周仅仅须要负责下一周。

    #include <stdio.h>
    #include <string.h>
    
    #define maxn 10002
    
    int min(int a, int b) {
        return a < b ? a : b;
    }
    
    int X[maxn], Y[maxn];
    
    int main() {
        int N, S, i, j;
        __int64 sum;
        while(scanf("%d%d", &N, &S) == 2) {
            for(i = 0; i < N; ++i)
                scanf("%d%d", &X[i], &Y[i]);
            for(i = sum = 0; i < N; ++i) {
                sum += X[i] * Y[i];
                if(i != N - 1)
                    X[i+1] = min(X[i+1], X[i] + S);
            }
            printf("%I64d
    ", sum);
        }
        return 0;
    }

    2014-12-1更新

    #include <stdio.h>
    #include <stdlib.h>
    #include <string.h>
    #include <iostream>
    #include <algorithm>
    #include <queue>
    using namespace std;
    typedef long long LL;
    
    LL ans;
    
    int main() {
        int N, S, i, c, m, pre;
        scanf("%d%d", &N, &S);
        scanf("%d%d", &c, &m);
        pre = c + S; // 仓库价格
        ans += c * m;
        while(--N) {
            scanf("%d%d", &c, &m);
            if(pre < c) c = pre;
            else pre = c;
            ans += c * m;
            pre += S;
        }
        printf("%lld
    ", ans);
        return 0;
    }


  • 相关阅读:
    前端基础学习分享
    IOS中block和代理
    最近一个项目的反思
    Coreseek Windows下安装调试
    iOS对象属性详解
    我眼里“维多利亚的秘密”中最性感的营销三点式
    用CSS制作带图标的按钮
    简单权限管理设计
    CentOS工作内容(三)配置网络IP地址
    CentOS工作内容(二)关闭SELinux
  • 原文地址:https://www.cnblogs.com/wzzkaifa/p/7119604.html
Copyright © 2020-2023  润新知