1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49
| #include <bits/stdc++.h> #define FOR(i, a, b) for (int i = a; i <= b; ++i) #define ROF(i, a, b) for (int i = a; i >= b; --i)
using namespace std;
typedef long long ll; typedef unsigned long long ull; typedef pair<ll,ll> pll; typedef array<ll,3> arr; const ll MAXN=5010,MAXval=static_cast<ll> (1e18)+3;
ll N,T,C; struct Food{ ll unit,ene; }; vector<Food> food[5];
ll dp[5][MAXN]; ll Len[5];
int main() { ios::sync_with_stdio(false); cin.tie(0);cout.tie(0); cin>>N>>C; FOR(i, 1, N){ ll kind,unit,ene; cin>>kind>>unit>>ene; food[kind].push_back((Food){unit,ene}); } Len[1]=food[1].size();Len[2]=food[2].size();Len[3]=food[3].size(); FOR(i, 1, 3){ FOR(j, 0, Len[i]-1){ ROF(k, C, food[i][j].ene){ dp[i][k]=max(dp[i][k],dp[i][k-food[i][j].ene]+food[i][j].unit); } } } ll ans=0; FOR(i, 0, C){ FOR(j, 0, C-i){ ans=max(min({dp[1][i],dp[2][j],dp[3][C-i-j]}),ans); } } cout<<ans<<'\n'; return 0; }
|