Tutor Simulation
Time limit2sMemory limit512 MB
Choose a sequence of teaching, training, and book-buying actions within the time limit that maximizes final cash.
- Level
Medium5 of 10
- Topics
- Dynamic programming, Brute force
- Solved
- No attempts yet
Problem
You need to compute a sequence of actions that maximizes the cash earned in a tutor simulation game. The actions are earning cash from tuition (TEACH), studying in college to raise your knowledge (TRAIN), and buying books (BUY). TRAIN raises your tuition income. BUY cuts the time units each TRAIN action consumes. Every action consumes time units, and only maxTimeUnits of them are available for work.
Like all games, the puzzle difficulty depends on the game variables and certain rules. This task has 4 game variables and 5 game rules. Value ranges are provided where appropriate.
Game variables
maxTimeUnits(10 - 1000): the maximum number of time units in the simulation game.learningRate(1, 2, 4, or 8): scales down the time units consumed by a TRAIN action, based on the number ofbookin your possession.paybackRate(5, 10, or 20): scales up the tuitionincomeearned from a TEACH action, based on theknowledgelevel.bookCost: an array of 4 integers in non decreasing order where the -th integer is the cost of the -th book. (The cost of each book is in the range $5 to $500.)
Game rules
- Before the simulation starts you have
maxTimeUnitsleft, yourcashis 0, yourknowledgeis 0, and you have 0book. - The simulation game lasts for
maxTimeUnits. Your aim is to obtain as muchcashas possible. - Every TEACH action spends 2 time units. The formula below gives the tuition
incomeper TEACH action. That is, the moreknowledgethat you have, the higher your income will be.
income = 10 + min(20, knowledge) * paybackRate - Every TRAIN action costs 20 dollars and it will increase the
knowledgelevel by 1 unit. The formula below gives thetrainingTimeper TRAIN action. That is, the morebookor the higherlearningRatethat you have, the lower yourtrainingTimewill be.
trainingTime = max(1, (int)(8 / max(1, book * learningRate))) - There are 4 books in this game. The -th BUY action will buy the -th book. It takes time units to buy the -th book (0-based indexing, so the first book can be bought with 0 time unit) and the cost of the -th book is stated in
bookCost[i]. As there are at most 4 books, you can perform at most 4 BUY actions.
Write a program that reads in the game variable values and determines the best possible sequence of actions. You need to implement a planner so that your cash is maximum at some time unit between 0 and maxTimeUnits. However, you should not violate the following two constraints:
- You cannot overshoot
maxTimeUnitswhen choosing an action. - You cannot incur negative
cashat any point, so you must be able to pay for any TRAIN or BUY action.
For example, suppose maxTimeUnits, learningRate, and paybackRate are 13, 8, and 20, respectively, and the 4 books cost $5, $50, $100, and $200.
Since you have 13 time units, a simple plan is to perform TEACH 6 times, which already earns 6 * (10 + min(20, 0) * 20) = 6 * 10 = $60. That is not the best answer. The optimal plan for these values reaches cash = $95 and runs like this:
Input
The input, from standard input, consists of two lines. The first line contains 3 integers, which are maxTimeUnits, learningRate, and paybackRate. The second line contains 4 integers where the -th integer is the cost of the -th book.
Output
Print a single integer to standard output: the maximum cash that you can gain.