Submission #1131259

#TimeUsernameProblemLanguageResultExecution timeMemory
1131259nlknKnapsack (NOI18_knapsack)C++20
100 / 100
93 ms2808 KiB
// Source: https://usaco.guide/general/io

#include <bits/stdc++.h>
#include <functional>
#include <utility>
using namespace std;

int main() {
	
	int m,n; cin >> m >>n;
	map<int,vector<pair<int,int>>> map;
	for(int i=0; i<n; i++){
		int v,w,k;cin>>v>>w>>k;
		map[w].push_back(make_pair(v,k));
	}
	vector<int> prev(m+1);
	for(auto i:map){
		int w=i.first;
		vector<int> curr(m+1);
		for(int j=0; j<=m; j++)curr[j]=prev[j];
		vector<pair<int,int>> pie=i.second;
		sort(pie.begin(),pie.end(),greater<pair<int, int>>());
		for(int j=0; j<=m; j++){
			int k=0,p=pie[0].second-1,sum=pie[0].first,wait=w;
			while(wait+j<=m){
				
				curr[wait+j]=max(curr[wait+j],prev[j]+sum);
		
				if(!p){
//cout<<p<<" "<<k<<endl;			
					k++;
		//	cout<<p<<" "<<k<<endl;
					if(k>=pie.size())break;
					p=pie[k].second;	
				}
				sum+=pie[k].first;
				wait+=w;
				p--;

			}
		}
		prev=curr;
	}
	int ans=0;
	for(int j=0; j<=m; j++){
		ans=max(ans,prev[j]);
	}
	cout<<ans;
}
#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...