Submission #1346325

#TimeUsernameProblemLanguageResultExecution timeMemory
1346325novemnotesKnapsack (NOI18_knapsack)C++20
0 / 100
13 ms31952 KiB
#include <bits/stdc++.h>
using namespace std;

#define int long long
const int N(1e5+9),K(2e3+9);

int n,k;
int dp[K][K];
vector<pair<int,int>> vp[K];

int32_t main(){
	ios_base::sync_with_stdio(false);cin.tie(NULL);
	cin >> k >> n;
	memset(dp,-1,sizeof(dp));
	for(int i=0;i<n;i++){
		int a,b,c;cin >> a >> b >> c;
		if(a<=k && c>0)vp[b].emplace_back(a,c);
	}
	int now=1;
	dp[0][0]=0;
	for(int w=1;w<=k;w++){
		if(vp[w].empty())continue;
		sort(vp[w].begin(),vp[w].end(),greater<pair<int,int>>());
		for(int i=0;i<=k;i++){
			dp[now][i]=dp[now-1][i];
			int use=0;
			int sum=0;
			int at=0;
			int pos=0;
			while((use+1)*w<=i && at<vp[w].size()){
				use++;
				sum += vp[w][at].first;
				if(dp[now-1][i-(use*w)]!=-1){
					dp[now][i]=max(dp[now][i],dp[now-1][i-(use*w)]+sum);
				}
				pos++;
				if(pos==vp[w][at].second){
					pos=0;
					at++;
				}

			}
		}
		now++;
	}
	int ans=0;
	for(int i=0;i<=k;i++){
		ans=max(ans,dp[now-1][i]);
	}
	cout << ans << "\n";
	return 0;
}
#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...