
배낭보다 DP가 더 시급한거 같은데 DP는 문제가 한정되지 않아서 잘 모르겠다.
#include <iostream>
#include <vector>
#include <algorithm>
using namespace std;
void input_data(vector<int>& A, vector<int>& m, int* N, int* M, int *sum) {
cout << "input_data()\n";
int i, temp;
cin >> *N >> *M;
A.resize(*N + 1);
m.resize(*N + 1);
for (i = 1; i <= *N; i++) {
cin >> A[i];
}
for (i = 1; i <= *N; i++) {
cin >> m[i];
*sum += m[i];
}
return;
}
int find_answer(vector<int>& A, vector<int>& m, int N, int M, int sum) {
cout << "find_answer()\n";
vector<int>DP(sum + 1, 0);
int i, j;
//M바이트를 확보하기 위한 앱 비활성화의 최소화 비용
//최소값 = 총합 - 최대값?
for (i = 1; i <= N; i++)
{
for (j = sum; j >= m[i]; j--)
{
DP[j] = max(DP[j], DP[j - m[i]] + A[i]);
}
for (j = 1; j <= sum; j++) {
cout << DP[j] << " ";
}
cout << "\n";
}
for (i = 0; i <= sum; i++) {
if (DP[i] >= M) {
return i;
}
}
}
int main(void) {
ios_base::sync_with_stdio(false);
cin.tie(NULL);
cout.tie(NULL);
vector<int> A;
vector<int> m;
int N, M, sum = 0;
input_data(A, m, &N, &M, &sum);
cout << find_answer(A, m, N, M, sum) << "\n";
return 0;
}