Advertisement
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][2];
- 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][flag]!=-1)
- return dp[n][m][flag];
- if(flag==0)
- return dp[n][m][flag]=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][flag]=max(v2[n-1]+knapsack(n-1,m-v1[n-1],1),knapsack(n-1,m,1));
- }
- int main()
- {
- ios_base::sync_with_stdio(false);cin.tie(NULL);
- 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];
- memset(dp,-1,sizeof(dp));
- 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
Advertisement