Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- #include <fstream>
- //#include <algorithm>
- #include <vector>
- #define MAX 5010
- using namespace std;
- ifstream fin("input.txt");
- ofstream fout("output.txt");
- //vector<vector<pair <int, vector <int> > > > memo (MAX, vector<pair<int, vector<int> > > (MAX, (-1,(0) ) ) );
- vector<vector<int> > memo (MAX, vector<int>(MAX, -1));
- //vector<vector<pair<int, int> > > memo1 (MAX, vector<int>(MAX, pair<int, int>(-1,-1)));
- vector<vector<pair<int, int> > > memo1 (MAX, vector<pair<int, int > >(MAX, pair<int, int> (-1, -1) ) );
- vector<int> arr;
- int n;
- int createSol(int i, int k){
- int temp;
- int a, b, ret;
- if (i == n && k >= 0)
- ret = 0;
- else if (i == n || k < 0)
- ret = -10e5;
- else if (memo[i][k] != -1)
- ret = memo[i][k];
- else{
- a = createSol(i+1, k-arr[i])+ arr[i];
- b = createSol(i+1, k);
- // memo[i][k] = min(a.first, b.first);
- ret = a > b ? a : b;
- memo1[i][k].first = i+1;
- if(ret == a)
- memo1[i][k].second = k-arr[i];
- else
- memo1[i][k].second = k;
- memo[i][k] = ret;
- }
- return ret;
- }
- void printSol(int i, int k){
- if (i<n){
- if (memo1[i][k].second == k-arr[i])
- fout << arr[i] << endl;
- printSol(memo1[i][k].first, memo1[i][k].second);
- }
- }
- int main(){
- int k, temp;
- // int ret;
- fin >> n;
- fin >> k;
- for (int i = 0; i < n; i++){
- fin >> temp;
- arr.push_back(temp);
- }
- //ret = createSol(0, k);
- createSol(0, k);
- //fout << ret << endl;
- printSol(0,k);
- }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement