[TopCoder] ColorfulBoxesAndBalls (알록달록 상자와 공들)
2023. 2. 26. 22:23ㆍAlgorithm
당신은 빨간 박스 번호, 파란 박스 번호, 빨간 공 번호, 파란 공 번호를 가진 게임을 하고 있습니다.
당신은 각각의 상자에 공을 하나씩 넣어야 합니다. 그런 다음 각 상자에 다음과 같이 점수가 매겨집니다:
상자가 빨간색이고 빨간색 공이 들어 있으면 OnlyRed만 받습니다.
상자가 파란색이고 파란색 공이 들어 있으면 OnlybBlue만 받습니다.
다른 모든 경우에는 bothColors를 얻을 수 있습니다.
당신의 총 점수는 모든 상자의 점수를 합한 것입니다. 얻을 수 있는 최대 총점을 반환합니다.
Definition
Class:
ColorfulBoxesAndBalls
Method:
getMaximum
Parameters:
int, int, int, int, int
Returns:
int
Method signature:
int getMaximum(int numRed, int numBlue, int onlyRed, int onlyBlue, int bothColors)
(be sure your method is public)
0)
In this example, you should put two red balls into red boxes, and three blue balls into blue boxes.
Then you can get 100 * 2 + 400 * 3 = 1400 points in total.
2
3
100
400
200
Returns: 1400
In this example, you should put two red balls into red boxes, and three blue balls into blue boxes.
Then you can get 100 * 2 + 400 * 3 = 1400 points in total.
1)
bothColors is a larger value here than it was in the previous example.
You should put two blue balls into red boxes, and two red balls and one blue ball into blue boxes.
Then you can get 300 * 4 + 400 * 1 = 1600 points.
2
3
100
400
300
Returns: 1600
bothColors is a larger value here than it was in the previous example.
You should put two blue balls into red boxes, and two red balls and one blue ball into blue boxes.
Then you can get 300 * 4 + 400 * 1 = 1600 points.
2)
5
5
464
464
464
Returns: 4640
No matter how you place the balls, your score will always be the same.
3)
1
4
20
-30
-10
Returns: -100
The maximum total score may be less than zero.
4)
9
1
-1
-10
4
Returns: 0
공이 이미 색이 일치하는 상자에 들어간 상태에서 공을 서로 하나씩 바꿔주면서 점수의 변화를 살펴보면 된다.
#include <algorithm>
#include <limits.h>
using namespace std;
class ColorfulBoxesAndBalls{
public:
int getMaximum(int numRed, int numBlue, int onlyRed, int onlyBlue, int bothColors){
int ans = INT_MIN;
int change_lim = min(numRed, numBlue);
for(int changed=0; changed<=change_lim; changed++){
int redScr = (numRed - changed) * onlyRed;
int blueScr = (numBlue - changed) * onlyBlue;
int changedScr = changed*bothColors*2;
ans = max(ans, redScr + blueScr + changedScr);
}
return ans;
}
};
'Algorithm' 카테고리의 다른 글
[TopCoder] Batchsystem(배치 시스템) (0) | 2023.03.01 |
---|---|
[TopCoder] StockHistory (주식 히스토리) (0) | 2023.03.01 |
[TopCoder] HandsShaking(악수) (1) | 2023.02.25 |
[TopCoder] ChessMetric (체스 행렬) (0) | 2023.02.25 |
[TopCoder] BadNeighbors (나쁜 이웃들) (0) | 2023.02.25 |