제출 #1223342

#제출 시각아이디문제언어결과실행 시간메모리
1223342MalixKnapsack (NOI18_knapsack)C++20
100 / 100
51 ms5960 KiB
#include <bits/stdc++.h> using namespace std; typedef long long ll; typedef vector<int> vi; typedef vector<vi> vii; typedef pair<int,int> pi; typedef vector<pi> pii; typedef tuple<int,int,int> ti; typedef vector<ll> li; typedef vector<li> lii; #define REP(i,a,b) for(int i=a;i<b;i++) #define F first #define S second #define PB push_back #define LSOne(s) ((s)&(-s)) #define all(x) (x).begin(),(x).end() ll INF=1000000000000000010; int inf=1e9+10; ll M=1e9+7; int main() { ios::sync_with_stdio(0); cin.tie(0); int n,m;cin>>m>>n; vii a(n,vi(3)); REP(i,0,n)REP(j,0,3)cin>>a[i][j]; REP(i,0,n)a[i][2]=min(a[i][2],m); vii arr(m+1); sort(all(a)); reverse(all(a)); REP(i,0,n)while(a[i][2]&&arr[a[i][1]].size()<(m/a[i][1])){ arr[a[i][1]].PB(a[i][0]); a[i][2]--; } REP(i,0,m+1){ sort(all(arr[i])); reverse(all(arr[i])); } vi dp(m+1,-1); dp[0]=0; REP(i,1,m+1)for(auto u:arr[i])for(int j=m-1;j>=0;j--)if(i+j<=m&&dp[j]!=-1)dp[i+j]=max(dp[i+j],dp[j]+u); cout<<*max_element(all(dp)); }
#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...