백준 12865 c++
#include <iostream>
#include <algorithm>
using namespace std;
int input(int lower, int upper)
{
//cout << "input()" << endl;
int A;
while (1)
{
cin >> A;
if (A >= lower && A <= upper)
{
break;
}
else
{
;
}
}
return A;
}
void input_array(int *W, int *V, int N)
{
int i;
for (i = 1; i < N + 1; i++)
{
W[i] = input(1, 100000);
V[i] = input(0, 1000); //입력값 주의
}
return;
}
int find_result(int* W, int* V, int N, int K)
{
int i, j, result = 0;;
int** DP = new int* [N+1];
for (i = 0; i < N + 1; i++)
{
DP[i] = new int[K + 1] { 0, 0, };
}
for (i = 1; i < N + 1; i++)
{
for (j = 1; j < K + 1; j++)
{
if (j >= W[i])
{
DP[i][j] = max(DP[i-1][j], DP[i-1][j-W[i]] + V[i]);
}
else
{
DP[i][j] = DP[i - 1][j];
}
}
}
/*for (i = 0; i < N + 1; i++)
{
for (j = 0; j < K + 1; j++)
{
cout << DP[i][j] << " ";
}
cout << "\n";
}*/
result = DP[N][K];
for (i = 0; i < N + 1; i++)
{
delete[] DP[i];
}
delete[] DP;
return result;
}
int main(void)
{
ios_base::sync_with_stdio(false);
cin.tie(NULL);
cout.tie(NULL);
int N, K;
int* W;
int* V;
N = input(1, 100);
K = input(1, 100000);
W = new int[N + 1] {0};
V = new int[N + 1] {0};
input_array(W, V, N);
cout << find_result(W, V, N, K) << "\n";
delete[] W;
delete[] V;
return 0;
}