Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- #include <iostream>
- #include <iomanip>
- #include <string>
- #include <sstream>
- #include <algorithm>
- #include <vector>
- #include <stdlib.h>
- #include <stdio.h>
- #include <fstream>
- #include <stack>
- #include <map>
- #include <cstring>
- #include <cmath>
- #include <set>
- #include <iterator>
- #include <cmath>
- #include <locale>
- #include <queue>
- #include <deque>
- #include <stack>
- using namespace std;
- const int MOD = 1e6+7;
- void VIVOD(vector<vector<long long int> > vec2, int n, int m)
- {
- for (auto i = 0; i < n; ++i)
- {
- for(auto j = 0; j < m; ++j)
- {
- cout << vec2[i][j] << " ";
- }
- cout << endl;
- }
- }
- int main()
- {
- long long int N, n, a;
- cin >> N >> n;
- vector<long long int> vec;
- for (auto i = 0; i < N; ++i)
- {
- cin >> a;
- vec.push_back(a);
- }
- vector<vector<long long int> > vec2(vec.size() + 1, vector<long long int> (n + 1, 0));
- for (auto i = 1; i < n + 1; ++i)
- {
- if (i >= vec[0])
- {
- vec2[0][i] = vec[0];
- }
- }
- for (auto i = 1; i < vec.size(); ++i)
- {
- for(auto j = 1; j < n + 1; ++j)
- {
- if (j < vec[i])
- vec2[i][j] = vec2[i - 1][j];
- else
- vec2[i][j] = max(vec2[i - 1][j], vec[i] + vec2[i - 1][j - vec[i]]);
- }
- }
- /*
- if (vec2[vec.size() - 1][n] == n)
- {
- cout << "YES";
- return 0;
- }
- cout << "NO";
- */
- cout << vec2[vec.size() - 1][n];
- //VIVOD(vec2, vec.size(), n + 1);
- return 0;
- }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement