Notice
Recent Posts
Recent Comments
Link
일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
1 | 2 | 3 | 4 | 5 | 6 | 7 |
8 | 9 | 10 | 11 | 12 | 13 | 14 |
15 | 16 | 17 | 18 | 19 | 20 | 21 |
22 | 23 | 24 | 25 | 26 | 27 | 28 |
29 | 30 | 31 |
Tags
- algorithm
- UnrealEngine5
- 백준
- 프로그래머스
- DirectX11
- 오블완
- 언리얼엔진5
- C++
- Programmers
- RootMotion
- 팰린드롬 만들기
- Frustum
- RVO
- 1563
- softeer
- GeeksForGeeks
- baekjoon
- IFileDialog
- winapi
- 2294
- const
- 티스토리챌린지
- Unreal Engine5
- C
- NRVO
- UnrealEngine4
- DeferredRendering
- UE5
- 줄 세우기
- directx
Archives
- Today
- Total
Game Develop
[Algorithm]Baekjoon 29792번 :: 규칙적인 보스돌이 본문
https://www.acmicpc.net/problem/29792
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
|
struct Node
{
long long hp;
long long money;
};
bool cmp(const Node& a, const Node& b)
{
return a.hp > b.hp;
}
long long n, m, k, input1, input2;
vector<long long> damages;
vector<Node> bosses;
long long bossesHP[13] = { 0 };
long long bossesMoney[13] = { 0 };
long long DFS(int index, long long damage, long double second, long long sumMoney)
{
long long answer = sumMoney;
for (int i = index+1; i < k; ++i)
{
long double attackSecond = ceill(bosses[i].hp / (long double)damage);
long long tempDamage = attackSecond * damage;
if (second >= attackSecond && bosses[i].hp <= tempDamage)
{
sumMoney += bosses[i].money;
answer = max(answer,DFS(i,damage, second - attackSecond, sumMoney));
sumMoney -= bosses[i].money;
}
}
return answer;
}
int main(void)
{
ios_base::sync_with_stdio(0);
cin.tie(0);
cout.tie(0);
cin >> n >> m >> k;
for (int i = 0; i < n; ++i)
{
cin >> input1;
damages.push_back(input1);
}
sort(damages.rbegin(), damages.rend());
for (int i = 0; i < k; ++i)
{
cin >> bossesHP[i] >> bossesMoney[i];
bosses.push_back({ bossesHP[i], bossesMoney[i] });
}
sort(bosses.begin(), bosses.end(), cmp);
long long sumAnswer = 0;
for (int i = 0; i < m; ++i) // 캐릭터들
{
sumAnswer += DFS(-1, damages[i], 900, 0);
}
cout << sumAnswer;
}
|
cs |
DP풀이 연습을 해야해서 배낭문제 풀이랑 매칭시키면서 풀어보려했는데 잘 안풀려서.. 일단 완전탐색으로 풀었다.
값들이 크기 때문에 long long과 long double을 이용해야 한다.
'Algorithm > Baekjoon' 카테고리의 다른 글
[Algorithm]Baekjoon 1261번 :: 알고스팟 (1) | 2023.10.12 |
---|---|
[Algorithm]Baekjoon 12908번 :: 텔레포트 3 (2) | 2023.10.11 |
[Algorithm] Baekjoon 1062번 : 가르침 (0) | 2023.10.10 |
[Algorithm] Baekjoon 18111번 : 마인크래프트 (1) | 2023.10.10 |
[Algorithm] Baekjoon 14890번 : 경사로 (0) | 2023.09.29 |