문제링크 : https://www.acmicpc.net/problem/14728
14728번: 벼락치기
ChAOS(Chung-ang Algorithm Organization and Study) 회장이 되어 일이 많아진 준석이는 시험기간에도 일 때문에 공부를 하지 못하다가 시험 전 날이 되어버리고 말았다. 다행히도 친절하신 교수님께서 아래와
www.acmicpc.net
#include <bits/stdc++.h>
using namespace std;
typedef long long ll;
typedef pair<int, int> pii;
const int MAX = 987654321;
int N, T, K, S;
int dp[10001];
int dp2[10001];
int main()
{
ios_base::sync_with_stdio(0);
cin.tie(0);
cin >> N >> T; // 갯수, 총 시간
for(int i=1; i<=N; i++)
{
cin >> K >> S; //공부 시간, 배점
for(int j=T; j>=K; j--)
{
dp[j] = max(dp[j], dp[j-K] + S); //배낭 알고리즘
}
}
cout << dp[T];
}
총 시간 내에 주어진 시간으로 최대한의 배점을 구하는 문제이다.
내용을 보아 배낭 문제임을 알 수 있다.
j 시간 만큼 (dp[j]) 최대 배점이 얼마인지를 구해주면 된다.
두번째 반복문을 int j=K~T로 하였다가 조금 헤매게 되었다.
직접 내용을 출력해보니 int j=K부터 시작할 경우에는 이미 푼 문제에 대해서 다시 풀어서 배점을 재획득하는 것을 반복하는 것을 알 수 있었다. (dp[300] = dp[50] * 6)
이를 위해서 dp[j]=T부터 시작하여 위에서부터 채워주도록 해주어야한다.
'백준 > 골드' 카테고리의 다른 글
[백준 5582번] 공통 부분 문자열 (C++) (0) | 2023.10.23 |
---|---|
[백준 15681번] 트리와 쿼리 (C++) (0) | 2023.10.22 |
[백준 2631번] 줄세우기 (C++) (0) | 2023.10.19 |
[백준 1915번] 가장 큰 정사각형 (C++) (0) | 2023.10.18 |
[백준 5557번] 1학년 (C++) (0) | 2023.10.17 |