|
| 1 | +// Q173 https://www.codingninjas.com/codestudio/problems/1072980?topList=striver-sde-sheet-problems&utm_source=striver&utm_medium=website&leftPanelTab=0 |
| 2 | + |
| 3 | + |
| 4 | + |
| 5 | + |
| 6 | +// Recursion |
| 7 | +// Time: O(2^n) |
| 8 | +// Space: O(n) |
| 9 | +#include<bits/stdc++.h> |
| 10 | +int ks(vector<int> &val, vector<int> &wt, int ind, int W){ |
| 11 | + if(ind==0) { |
| 12 | + if(wt[0]<=W) return val[0]; |
| 13 | + return 0; |
| 14 | + } |
| 15 | + int nt=ks(val,wt,ind-1,W); |
| 16 | + int t=INT_MIN; |
| 17 | + if(wt[ind]<=W) |
| 18 | + t=val[ind]+ks(val,wt,ind-1,W-wt[ind]); |
| 19 | + return max(t,nt); |
| 20 | +} |
| 21 | + |
| 22 | +int maxProfit(vector<int> &val, vector<int> &wt, int n, int W) |
| 23 | +{ |
| 24 | + return ks(val,wt,n-1,W); |
| 25 | +} |
| 26 | + |
| 27 | + |
| 28 | +// Memorisation |
| 29 | +// Time: O(N*m) |
| 30 | +// Space: O(N*M)+O(N) = auxiliary stack space+ dp |
| 31 | +#include<bits/stdc++.h> |
| 32 | +int ks(vector<int> &val, vector<int> &wt, int ind, int W,vector<vector<int>> &dp){ |
| 33 | + if(ind==0) { |
| 34 | + if(wt[0]<=W) return val[0]; |
| 35 | + return 0; |
| 36 | + } |
| 37 | + if(dp[ind][W]!=-1) return dp[ind][W]; |
| 38 | + int nt=ks(val,wt,ind-1,W,dp); |
| 39 | + int t=INT_MIN; |
| 40 | + if(wt[ind]<=W) |
| 41 | + t=val[ind]+ks(val,wt,ind-1,W-wt[ind],dp); |
| 42 | + return dp[ind][W]=max(t,nt); |
| 43 | +} |
| 44 | + |
| 45 | +int maxProfit(vector<int> &val, vector<int> &wt, int n, int W) |
| 46 | +{ vector<vector<int>> dp(n,vector<int>(W+1,-1)); |
| 47 | + return ks(val,wt,n-1,W,dp); |
| 48 | +} |
| 49 | + |
| 50 | + |
| 51 | + |
| 52 | + |
| 53 | + |
| 54 | +// DP |
| 55 | +// Time: O(N*m) |
| 56 | +// Space: O(N*M) |
| 57 | +#include<bits/stdc++.h> |
| 58 | +int maxProfit(vector<int> &val, vector<int> &wt, int n, int W) |
| 59 | +{ vector<vector<int>> dp(n,vector<int>(W+1,0)); |
| 60 | + for(int cw=0;cw<W+1;cw++) dp[0][cw]=val[0]; |
| 61 | + for(int ind=1;ind<n;ind++){ |
| 62 | + for(int cw=0;cw<=W;cw++){ |
| 63 | + int nt=dp[ind-1][cw]; |
| 64 | + int t=INT_MIN; |
| 65 | + if(wt[ind]<=cw) |
| 66 | + t=val[ind]+dp[ind-1][cw-wt[ind]]; |
| 67 | + dp[ind][cw]=max(t,nt); |
| 68 | + } |
| 69 | + |
| 70 | + } |
| 71 | +// for(int ind=0;ind<n;ind++){ |
| 72 | +// for(int cw=0;cw<=W;cw++){ |
| 73 | +// cout<<dp[ind][cw]<<" "; |
| 74 | +// } |
| 75 | +// cout<<endl; |
| 76 | +// } |
| 77 | + |
| 78 | + return dp[n-1][W]; |
| 79 | + |
| 80 | +} |
| 81 | + |
| 82 | +// TABULATION |
| 83 | +// Time: O(N*m) |
| 84 | +// Space: O(2*M) |
| 85 | +#include<bits/stdc++.h> |
| 86 | +int maxProfit(vector<int> &val, vector<int> &wt, int n, int W){ |
| 87 | + vector<int> p(W+1,0); |
| 88 | + vector<int> c(W+1,0); |
| 89 | + for(int cw=wt[0];cw<W+1;cw++) p[cw]=val[0]; |
| 90 | + for(int ind=1;ind<n;ind++){ |
| 91 | + for(int cw=0;cw<=W;cw++){ |
| 92 | + int nt=p[cw]; |
| 93 | + int t=INT_MIN; |
| 94 | + if(wt[ind]<=cw) |
| 95 | + t=val[ind]+p[cw-wt[ind]]; |
| 96 | + c[cw]=max(t,nt); |
| 97 | + } |
| 98 | + p=c; |
| 99 | + |
| 100 | + } |
| 101 | + return p[W]; |
| 102 | + |
| 103 | +} |
| 104 | + |
| 105 | + |
| 106 | + |
| 107 | +// SINGLE ARRAY TABULATION |
| 108 | +// Time: O(N*m) |
| 109 | +// Space: O(M) |
| 110 | +#include<bits/stdc++.h> |
| 111 | +int maxProfit(vector<int> &val, vector<int> &wt, int n, int W){ |
| 112 | + vector<int> p(W+1,0); |
| 113 | +// vector<int> c(W+1,0); |
| 114 | + for(int cw=wt[0];cw<W+1;cw++) p[cw]=val[0]; |
| 115 | + for(int ind=1;ind<n;ind++){ |
| 116 | + for(int cw=W;cw>=0;cw--){ |
| 117 | + int nt=p[cw]; |
| 118 | + int t=INT_MIN; |
| 119 | + if(wt[ind]<=cw) |
| 120 | + t=val[ind]+p[cw-wt[ind]]; |
| 121 | + p[cw]=max(t,nt); |
| 122 | + } |
| 123 | +// p=c; |
| 124 | + |
| 125 | + } |
| 126 | + return p[W]; |
| 127 | + |
| 128 | +} |
0 commit comments