baekjoon

[백준] 14827 벼락치기

윤만석 2023. 6. 1. 11:46

문제

ChAOS(Chung-ang Algorithm Organization and Study) 회장이 되어 일이 많아진 준석이는 시험기간에도 일 때문에 공부를 하지 못하다가 시험 전 날이 되어버리고 말았다. 다행히도 친절하신 교수님께서 아래와 같은 힌트를 시험 전에 공지해 주셨다. 내용은 아래와 같다.

  1. 여러 단원을 융합한 문제는 출제하지 않는다.
  2. 한 단원에 한 문제를 출제한다. 단, 그 단원에 모든 내용을 알고 있어야 풀 수 있는 문제를 낼 것이다.

이런 두가지 힌트와 함께 각 단원 별 배점을 적어 놓으셨다. 어떤 단원의 문제를 맞추기 위해서는 그 단원의 예상 공부 시간만큼, 혹은 그보다 더 많이 공부하면 맞출 수 있다고 가정하자. 이때, ChAOS 회장 일로 인해 힘든 준석이를 위하여 남은 시간 동안 공부해서 얻을 수 있는 최대 점수를 구하는 프로그램을 만들어 주도록 하자.

입력

첫째 줄에는 이번 시험의 단원 개수 N(1 ≤ N ≤ 100)과 시험까지 공부 할 수 있는 총 시간 T(1 ≤ T ≤ 10000)가 공백을 사이에 두고 주어진다.

둘째 줄부터 N 줄에 걸쳐서 각 단원 별 예상 공부 시간 K(1 ≤ K ≤ 1000)와 그 단원 문제의 배점 S(1 ≤ S ≤ 1000)가 공백을 사이에 두고 주어진다.

출력

첫째 줄에 준석이가 얻을 수 있는 최대 점수를 출력한다.

냅색문제입니다.

한 단원당 한 문제만 출제됩니다. 따라서 2차원 배열을 사용했습니다.

#include<bits/stdc++.h>
#define FAST ios_base::sync_with_stdio(false),cin.tie(NULL);
#define mset(v) memset(v,0,sizeof(v));
#define rep(i,a) for(int i=0;i<a;++i)
#define REP(i,a) for(int i=1;i<=a;++i)
#define all(v) v.begin(), v.end()
using namespace std;

typedef long long ll;
typedef pair<int, int> pi;
typedef tuple<int, int, int>ti;
typedef vector<int> vi;
typedef vector<vector<int>> vvi;
int dy[] = { -1,0,1,0 }, dx[] = { 0,1,0,-1 }, INF = 100001;

int N, T, K, S, a[101][10001], ans = 0;
int main() {
	FAST;
	cin >> N >> T;
	REP(i, N) {
		cin >> K >> S;
		for (int j = 1; j <= T; j++) {
			if (j < K)
				a[i][j] = a[i - 1][j];
			else
				a[i][j] = max(a[i - 1][j], S + a[i - 1][j - K]);
			ans = max(ans, a[i][j]);
		}
	}
	cout << ans;
}

'baekjoon' 카테고리의 다른 글

[백준] 1446 지름길  (0) 2023.06.05
[백준] 15892 사탕 줍는 로봇  (0) 2023.06.01
[백준] 1535 안녕  (0) 2023.06.01
[백준] 1106 호텔  (0) 2023.06.01
[백준] 18352 특정 거리의 도시 찾기  (0) 2023.05.31