From d0f09506d9ffe66414566542da31e54be12ba0c5 Mon Sep 17 00:00:00 2001 From: kimhojun <63347089+esc10946@users.noreply.github.com> Date: Mon, 5 Jan 2026 08:31:23 +0900 Subject: [PATCH] Add files via upload --- _hojun/2655.cpp | 64 +++++++++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 64 insertions(+) create mode 100644 _hojun/2655.cpp diff --git a/_hojun/2655.cpp b/_hojun/2655.cpp new file mode 100644 index 00000000..e700de45 --- /dev/null +++ b/_hojun/2655.cpp @@ -0,0 +1,64 @@ +#include + +using namespace std; + +struct Brick { + int id; // 원래 벽돌 번호 + int area; + int height; + int weight; +}; +bool compare(const Brick& a, const Brick& b) { + return a.area > b.area; +} + +int main() { + ios_base::sync_with_stdio(false); + cin.tie(NULL); + + int n; cin >> n; + vector bricks(n); + + for (int i = 0; i < n; i++) { + bricks[i].id = i + 1; + cin >> bricks[i].area >> bricks[i].height >> bricks[i].weight; + } + + sort(bricks.begin(), bricks.end(), compare); + + vector dp(n, 0); + vector trace(n, -1); + + int max_height = 0; + int last_idx = -1; + + for (int i = 0; i < n; i++) { + dp[i] = bricks[i].height; + for (int j = 0; j < i; j++) { + if (bricks[j].weight > bricks[i].weight) { + if (dp[j] + bricks[i].height > dp[i]) { + dp[i] = dp[j] + bricks[i].height; + trace[i] = j; + } + } + } + if (dp[i] > max_height) { + max_height = dp[i]; + last_idx = i; + } + } + + vector result; + int curr = last_idx; + while (curr != -1) { + result.push_back(bricks[curr].id); + curr = trace[curr]; + } + + cout << result.size() << "\n"; + for (int id : result) { + cout << id << "\n"; + } + + return 0; +} \ No newline at end of file