topcoder SRM 617 DIV2 SlimeXSlimonadeTycoon

此题需要注意的两个地方是

(1)在某天生产出来的Slimonades,必须在stale_limit天内必须卖完,否则超过stale_limit内抛弃(东西都有保质期)

(2)每天生产出来的Slimonades的数量在0到morning[i]之间,而不是morning[i]

故第i天卖的东西可能来自max(0,i-stale_limit+1)~i 之间任何一天的东西,假设j在这些天数之间,

则第j天生产的东西在第i天卖的数量为min(morning[j], customer[i]),故遍历一遍即可

#include <iostream>
#include <vector>
#include <algorithm>

using namespace std;

class SlimeXSlimonadeTycoon{
public:
    int sell(vector<int> morning, vector<int> customers, int stale_limit){
        int res = 0 ;
        for(int i = 0 ; i < morning.size(); ++ i){
            for(int j = max(0,i-stale_limit+1); j<= i; ++ j){
                if(customers[i] > 0){
                    int t = min(customers[i],morning[j]);
                    res += t;
                    customers[i] -=t;
                    morning[j] -=t;
                }
            }
        }
        return res;
    }
};

 

 

posted @ 2014-06-10 23:23  OpenSoucre  阅读(128)  评论(0编辑  收藏  举报