Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- #include<bits/stdc++.h>
- using namespace std;
- #define read freopen("input.txt","r",stdin)
- #define write freopen("output.txt","w",stdout)
- const int MAXN = 100;
- int weight[MAXN];
- int value[MAXN];
- int N;
- int mxCapacity;
- int dp[MAXN][MAXN];
- int item[MAXN][MAXN];
- int cnt = 0;
- int call(int i, int capacity)
- {
- if (i < 0 || capacity == 0) return 0;
- if (dp[i][capacity] != -1)
- return dp[i][capacity];
- int res1 = 0, res2 = 0;
- if(capacity - weight[i] >= 0) res1 = value[i] + call(i - 1, capacity - weight[i]);
- res2 = call(i - 1, capacity);
- if(res1 > res2)
- {
- item[i][capacity] = 1;
- }
- else
- item[i][capacity] = 2;
- return dp[i][capacity] = max(res1, res2);
- }
- void printItem(int i, int capacity)
- {
- if (item[i][capacity] == 0)
- return;
- if(item[i][capacity] == 1)
- {
- printItem(i - 1, capacity - weight[i]);
- cout << weight[i] << " " << value[i] << endl;
- }
- else
- printItem(i - 1, capacity);
- }
- int main()
- {
- read;
- write;
- memset(dp, -1, sizeof(dp));
- int mxCapacity;
- cnt = 0;
- cin >> N >> mxCapacity;
- for (int i = 0; i < N; i++)
- {
- cin >> weight[i] >> value[i];
- }
- int ans = call(N-1, mxCapacity);
- cout << "Answer: " << ans << endl;
- cout << "Items Taken: " << endl;
- printItem(N - 1, mxCapacity);
- cout << "dp Table: " << endl;
- for (int i = 0; i < N; i++)
- {
- for (int j = 0; j <= mxCapacity; j++)
- {
- cout << dp[i][j] << ' ';
- }
- cout << endl;
- }
- return 0;
- }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement