백준 29704 c++ : 배낭문제 + DP

#include <iostream>
#include <vector>
using namespace std;
void input_data(int* N, int* T, vector<pair<int, int>>& penalty, int *sum) {
cout << "input_data()\n";
int i, d, m;
cin >> *N >> *T;
for (i = 0; i < *N; i++) {
cin >> d >> m;
penalty.push_back({ d, m });
*sum += m;
}
return;
}
int find_answer(int N, int T, vector<pair<int, int>>& penalty, int sum) {
cout << "find_answer()\n";
int i, j;
vector<vector<int>> dp(N + 1, vector<int>(T + 1, 0));
//해결할 수 있는 최대값 구해서 총합 sum에서 빼기?
for (i = 1; i <= N; i++) {
for (j = 1; j <= T; j++) {
if (j - penalty[i - 1].first >= 0) {
dp[i][j] = max(dp[i - 1][j], penalty[i - 1].second + dp[i - 1][j - penalty[i - 1].first]);
}
else {
dp[i][j] = dp[i - 1][j];
}
}
for (int k = 0; k <= N; k++) {
for (int l = 0; l <= T; l++) {
cout << dp[k][l] << " ";
}
cout << "\n";
}
cout << "\n";
}
return sum - dp[N][T];
}
int main(void) {
ios_base::sync_with_stdio(false);
cin.tie(NULL);
cout.tie(NULL);
int N, T, sum = 0;
vector<pair<int, int>> penalty;
input_data(&N, &T, penalty, &sum);
cout << find_answer(N, T, penalty, sum) << "\n";
return 0;
}