#include <iostream>
#define MAXL 20
#define MAXJ 100
using namespace std;
int DP[MAXL+1][MAXJ+1], L[MAXL+1], J[MAXJ+1];
int N;
void input() {
cin >> N ;
for (int i = 1; i <= N; i++)
cin >> L[i];
for (int i = 1; i <= N; i++)
cin >> J[i];
}
void solve() {
for (int i = 1; i <= N; i++) {
for (int j = 1; j < 100; j++) {
if (j >= L[i])
DP[i][j] = max(DP[i - 1][j - L[i]] + J[i], DP[i - 1][j]);
else
DP[i][j] = DP[i - 1][j];
}
}
int res = 0;
for (int i = 1; i < 100; i++)
res = max(DP[N][i], res);
cout << res << endl;
//cout << DP[N][99] << endl;
}
int main() {
input();
solve();
}
가방 문제였다.
우선 초기화를 안해줘도 되는데 해준 부분이 가장 문제였다.
시작을 1부터로 해야 -1을 해줬을 때 문제가 없다.
'Algorithm > BOJ' 카테고리의 다른 글
[BOJ] 3933 라그랑주의 네 제곱수 정리 (0) | 2021.06.15 |
---|---|
[BOJ] 1058 친구 (0) | 2021.06.10 |
[BOJ] 1261 알고스팟 (0) | 2021.05.21 |
[BOJ] 1182 부분수열의 합 (0) | 2021.05.15 |
[BOJ] 6603 로또 (0) | 2021.05.15 |