TopCoder----卖柠檬

本文介绍了一款名为SlimeTycoon的游戏,玩家需在有限时间内制作并销售Slimonades,通过合理安排生产与销售策略来实现收益最大化。文章详细解释了游戏规则,并给出了一种最优解决方案。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

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:
  • Early in the morning of day i: All Slimonades that were produced stale_limit days ago (i.e., on day i-stale_limit) go stale. You cannot sell stale Slimonades, you must throw them away immediately.
  • During day i: You can produce at most morning[i] new Slimonades. (Formally, you choose an integer X between 0 and morning[i], inclusive, and produce X Slimonades.)
  • In the evening of day i: You can sell at most customers[i] Slimonades. (That is, if you have at mostcustomers[i] Slimonades, you sell all of them. Otherwise, you sell exactly customers[i] Slimonades. In that case, you get to choose which Slimonades you sell and which ones you keep for later days.)
What is the maximum total number of Slimonades that you can sell during these N days?

Definition

 
Class:SlimeXSlimonadeTycoon
Method:sell
Parameters:vector <int>, vector <int>, int
Returns:int
Method signature:int sell(vector <int> morning, vector <int> customers, int stale_limit)
(be sure your method is public)

Limits

 
Time limit (s):2.000
Memory limit (MB):256

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

 
{5, 1, 1}
{1, 2, 3}
2
Returns: 5
Here's one optimal solution.
  • Day 0: We produce 4 Slimonades, then sell 1 of them.
  • Day 1: We produce 1 Slimonade (so now we have 4). In the evening, we sell two of the Slimonades that were made yesterday.
  • Day 2: We still have one Slimonade that was made on day 0. It goes stale and we throw it away. We produce one more Slimonade. In the evening, we sell 2 Slimonades (the one made yesterday and the one made today).


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) ;
}
};


评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值