ShopPositions
SRM 667 · 2015-08-28 · by lg5293
Problem Statement
Carol is starting a new taco shop business. She is going to open some taco shops in a block of buildings. The blocks consists of n adjacent buildings in a row. Each building has exactly m floors. The buildings are numbered 0 through n-1 in order.
Carol can open between 0 and m taco shops in each building (as there can be at most one taco shop per floor in each building). For each taco shop, the profit P[x][y] will depend on two factors:
- the number x of the building that contains this taco shop
- the total count y of taco shops in that particular building and in buildings adjacent to that building (including this particular taco store)
You are given the
It is guaranteed that the profits don't increase as y increases. That is, for each valid x and y, P[x][y] will be greater than or equal to P[x][y+1]. Note that the profit is for a single store. For example, if there are three taco stores in building 7 and no other stores in buildings 6 and 8, each of these three taco stores will bring the profit P[7][3].
Determine and return the maximum total profit that Carol can gain from opening the taco shops.
Constraints
- n will be between 1 and 30, inclusive.
- m will be between 1 and 30, inclusive.
- c will have exactly n*3*m elements.
- Each element of c will be between 1 and 1,000, inclusive.
- For each x between 0 and n-1, the sequence c[3*m*x], c[3*m*x + 1], ..., c[3*m*(x+1) - 1] will be sorted in nonincreasing order
1
5
{100, 90, 80, 70, 60, 50, 40, 30, 20, 10, 1, 1, 1, 1, 1}
Returns: 300
Carol has 1 building with 5 floors. Building one shop will get her a profit of 100, while building two shops will get a profit of 90*2. The optimal strategy in this case is to build 5 taco shops, for a profit of 60*5=300.
1
5
{1000, 5, 4, 2, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1}
Returns: 1000
3
1
{
7,6,1,
10,4,1,
7,6,3
}
Returns: 14
The optimal strategy here is to open one taco store in building 0 and one taco store in building 2.
2
2
{
12,11,10,9,8,7,
6,5,4,3,2,1
}
Returns: 24
3
3
{
30,28,25,15,14,10,5,4,2,
50,40,30,28,17,13,8,6,3,
45,26,14,14,13,13,2,1,1
}
Returns: 127
Submissions are judged against all 38 archived test cases, of which 5 are shown here. Case numbers match the judge’s.
Language: C++17 · define a public class ShopPositions with a public method int maxProfit(int n, int m, vector<int> c) · 38 test cases · 2 s / 256 MB per case