Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- #include <iostream>
- #include <fstream>
- #include <algorithm>
- #include <vector>
- #include <functional>
- using namespace std;
- int main() {
- ifstream fin("input.txt");
- ofstream fout("output.txt");
- int n, m;
- fin >> n >> m;
- vector<int> c(n+1);
- vector<int> w(n+1);
- for (int i = 1; i <= n; i++) fin >> w[i];
- for (int i = 1; i <= n; i++) fin >> c[i];
- vector<vector<int>> vec(n + 1, vector<int>(m+1));
- for (int i = 1; i <= n; i++)
- for (int j = 1; j <= m; j++) {
- if (w[i] <= j)
- vec[i][j] = max(vec[i - 1][j], vec[i - 1][j - w[i]] + c[i]);
- else
- vec[i][j] = vec[i - 1][j];
- }
- function<void(int, int)> print = [&](int i, int j) {
- if (vec[i][j] == 0) return;
- else if (vec[i][j] == vec[i - 1][j]) print(i - 1, j);
- else {
- print(i - 1, j - w[i]);
- fout << i << endl;
- }
- };
- print(n, m);
- fin.close();
- fout.close();
- return 0;
- }
Advertisement
Add Comment
Please, Sign In to add comment