반응형
https://www.acmicpc.net/problem/14728
14728번: 벼락치기
ChAOS(Chung-ang Algorithm Organization and Study) 회장이 되어 일이 많아진 준석이는 시험기간에도 일 때문에 공부를 하지 못하다가 시험 전 날이 되어버리고 말았다. 다행히도 친절하신 교수님께서 아래와
www.acmicpc.net
1. 문제설명
첫째 줄에는 이번 시험의 단원 개수 N(1 ≤ N ≤ 100)과
시험까지 공부 할 수 있는 총 시간 T(1 ≤ T ≤ 10000)가 공백을 사이에 두고 주어진다.
둘째 줄부터 N 줄에 걸쳐서 각 단원 별 예상 공부 시간 K(1 ≤ K ≤ 1000)와
그 단원 문제의 배점 S(1 ≤ S ≤ 1000)가 공백을 사이에 두고 주어진다.
각 문제는 한번 씩만 풀 수 있고 최대 점수를 구해야 한다.
2. 접근 방법[알고리즘]
각 문제는 한 번만 풀 수 있으므로
다이나믹 테이블 dy에 for문을 뒤부터 돌면서
최댓값을 누적해주면 된다.
for문을 뒤부터 도는 이유는
이 문제는 각 단원 문제를 단 한 번씩 풀 수 있는데
앞에서부터 돌면 계속해서 중복된 값을 더해서 누적하기 때문이다.
중복된 값을 누적하는 걸 피하기 위해 뒤부터 돈다.
만약 각 단원 문제를 여러번 풀 수 있다면
for문을 앞에서 부터 돌아 계속 중복해서 누적해주면 된다.
3. 문제풀이코드 C++
#include <bits/stdc++.h>
using namespace std;
int n, t, dy[10001];
int main() {
ios::sync_with_stdio(0);
cin.tie(0);
cin >> n >> t;
for (int i = 0; i < n; i++) {
int k, s;
cin >> k >> s;
for (int j = t; j >= k; j--) {
dy[j] = max(dy[j], dy[j - k] + s);
}
}
cout << dy[t];
}
반응형
'Algorithm > problem' 카테고리의 다른 글
백준 16964번 : DFS 스페셜 저지 - DFS, C++ (0) | 2022.01.29 |
---|---|
백준 2252번: 줄 세우기 - 위상정렬 문제 (0) | 2022.01.28 |
백준 2662번 : 기업투자 - DP 냅색(배낭) 알고리즘 C++ (0) | 2022.01.27 |
백준 1535번:안녕 -냅색(배낭)문제 C++ (0) | 2022.01.27 |
백준 2629번: 양팔저울 - 냅색(배낭) 문제 (0) | 2022.01.27 |