1. 题目描述
Problem Statement |
|||||||||||||
You are playing a game called Slime Tycoon.You will be selling Slimonades in this game, and your goal is to sell as many as you can. The game will consist of N game days, numbered 0 through N-1 in order.You are given two vector <int>s morning and customers with N elements each, and an int stale_limit.These represent constraints on how many Slimonades you can produce and sell, as explained below. In each game day, three things happen, in the following order:
What is the maximum total number of Slimonades that you can sell during these N days? |
|||||||||||||
Definition |
|||||||||||||
|
|||||||||||||
Limits |
|||||||||||||
|
|||||||||||||
Constraints |
|||||||||||||
- | morning will contain between 2 and 50 elements, inclusive. | ||||||||||||
- | Each element of morning will be between 0 and 10000, inclusive. | ||||||||||||
- |
customers will contain the same number of elements as morning. |
||||||||||||
- | Each element of customers will be between 0 and 10000, inclusive. | ||||||||||||
- | stale_limit will be between 1 and N, inclusive. | ||||||||||||
Examples |
|||||||||||||
|
2. 分析
采用如下的策略,每天尽可能多地生产,并且优先卖生产日期久的。。采用一个队列。。
3. 代码
class SlimeXSlimonadeTycoon
{
public:
int sell(vector <int> morning, vector <int> customers, int stale_limit)
{
if(morning.empty()) return 0; int que[100000];
int front = 0, rear = 0;
int count(0);
for(int i=0; i<morning.size(); ++i)
{
if(front - rear == stale_limit) ++rear;
que[front++] = morning[i]; while(rear < front && customers[i] > 0)
{
if(que[rear] > customers[i]){
count += customers[i];
que[rear] -= customers[i];
break;
}
else{
count += que[rear];
customers[i] -= que[rear];
++rear;
}
}
}
return int(count) ;
}
};