문제
ChAOS(Chung-ang Algorithm Organization and Study) 회장이 되어 일이 많아진 준석이는 시험기간에도 일 때문에 공부를 하지 못하다가 시험 전 날이 되어버리고 말았다. 다행히도 친절하신 교수님께서 아래와 같은 힌트를 시험 전에 공지해 주셨다. 내용은 아래와 같다.
- 여러 단원을 융합한 문제는 출제하지 않는다.
- 한 단원에 한 문제를 출제한다. 단, 그 단원에 모든 내용을 알고 있어야 풀 수 있는 문제를 낼 것이다.
이런 두가지 힌트와 함께 각 단원 별 배점을 적어 놓으셨다. 어떤 단원의 문제를 맞추기 위해서는 그 단원의 예상 공부 시간만큼, 혹은 그보다 더 많이 공부하면 맞출 수 있다고 가정하자. 이때, 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 |