Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- #include <bits/stdc++.h>
- #define vi vector<int>
- #define ll long long
- using namespace std;
- ll dp[1002][1002];
- vector<ll> v1,v2;
- ll knapsack(int n,int m,int flag)
- {
- if(m<0)
- return INT_MIN;
- if(n==0)
- return 0;
- if(dp[n][m]!=-1)
- return dp[n][m];
- if(flag==0)
- return dp[n][m]=max(v2[n-1]+knapsack(n-1,m-v1[n-1],0),max(v2[n-1]+knapsack(n-1,m-v1[n-1]/2,1),knapsack(n-1,m,0)));
- else
- return dp[n][m]=max(v2[n-1]+knapsack(n-1,m-v1[n-1],1),knapsack(n-1,m,1));
- }
- int main()
- {
- int n,m;
- cin>>n>>m;
- string s[n];
- char d[n];int a[n],b[n];
- for(int i=0;i<n;i++)
- cin>>s[i]>>d[i]>>a[i]>>b[i];
- for(int i=0;i<=n;i++)
- {
- for(int j=0;j<=m;j++)
- dp[i][j]=-1;
- }
- for(int i=0;i<n;i++)
- {
- if(d[i]=='S')
- {
- v1.push_back(a[i]);
- v2.push_back(b[i]);
- }
- }
- int n1=v1.size();
- cout<<knapsack(n1,m,0);
- return 0;
- }
Advertisement
Add Comment
Please, Sign In to add comment