#include <iostream>
#include <vector>
#include <algorithm>
#include <cstring>
using namespace std;
int arr[101][100001];
pair<int, int> item[101];
int n, k, w, v;
int func() {
for (int i = 1; i <= n; i++) {
for (int j = 1; j <= k; j++) {
if (item[i].first > j)
arr[i][j] = arr[i - 1][j];
else
arr[i][j] = max(arr[i - 1][j], arr[i - 1][j - item[i].first]
+ item[i].second);
}
}
return arr[n][k];
}
int main() {
scanf("%d %d", &n, &k);
for (int i = 1; i <= n; i++)
{
scanf("%d %d", &w, &v);
item[i].first = w;
item[i].second = v;
}
memset(arr, 0, sizeof(arr));
int result= func();
printf("%d", result);
return 0;
}
'성우리뷰' 카테고리의 다른 글
팰린드롬 만들기 (2) | 2020.09.12 |
---|---|
도둑질(with 비트마스킹, dp) (2) | 2020.09.08 |
과제 (5) | 2020.08.29 |
앱 (2) | 2020.08.21 |
범위가 커졌을 때의 최대 긴 증가수열 (1) | 2020.08.12 |