제출 #480228

#제출 시각아이디문제언어결과실행 시간메모리
480228keertanKnapsack (NOI18_knapsack)C++17
73 / 100
1096 ms2340 KiB
/** * If you live in imaginary world when your imaginary situation encounter in * real situation you can't enjoiy it because you have to do pending work. * {This pending work appeared because you wasted that time for your useless * imagianry thinking.} */ #include<bits/stdc++.h> using namespace std; //#define int int64_t #define all(x) x.begin(),x.end() #define all1(x) x.rbegin(),x.rend() #define sz(x) (int)x.size() const int N=5e5+5; int dp[2][2001]; priority_queue<int> q[2001]; void solve(){ int s,n; cin>>s>>n; vector<array<int,3>> ok(n); for (int i=0;i<n;i++){ cin>>ok[i][1]>>ok[i][0]>>ok[i][2]; } for (int i=0,x,y,z;i<n;i++){ x=ok[i][0],y=ok[i][1],z=ok[i][2]; int req=s/x; for (int j=1;j<=min(req,z);j++){ q[x].push(-y); if (sz(q[x])>req){q[x].pop();} } } int u(0); int cur=1,prv=0; for (int i=1;i<=s;i++){ while(!q[i].empty()){ u=q[i].top(); q[i].pop(); u*=-1; for (int j=1;j<=s;j++){ dp[cur][j]=dp[prv][j]; if (j>=i && dp[cur][j]<dp[prv][j-i]+u){ dp[cur][j]=dp[prv][j-i]+u; } } cur^=1; prv^=1; } } int ans=0; for (int i=1;i<=s;i++){ans=max(ans,dp[prv][i]);} cout<<ans; } int32_t main(){ ios::sync_with_stdio(false);cin.tie(nullptr);cout.tie(nullptr); //freopen("feast.in","r",stdin); //freopen("feast.out","w",stdout); int tq=1; //cin>>tq; for (;tq;tq--){solve();} } //is a bruteforce possible? //think greedier, make more assumptions // if we you find solution using loop to decrease complexity use bs //stuck for more than 5 minutes? move on
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...