Submission #675054

#TimeUsernameProblemLanguageResultExecution timeMemory
675054scrgeKnapsack (NOI18_knapsack)C++17
100 / 100
147 ms36424 KiB
#include <bits/stdc++.h>
#define int long long
using namespace std;

int n, s;
int dp[2005][2005];
vector<pair<int, int> > items[2005];

int32_t main(){
	cin >> s >> n;
	memset(dp, -1, sizeof dp);
	
	dp[0][0] = 0;

	for(int i = 0; i < n; i++){
		int v, w, k; cin >> v >> w >> k;
		items[w].push_back(make_pair(v, k));
	}
	for(int i = 1; i <= s; i++){
		sort(items[i].rbegin(), items[i].rend());
		for(int j = 0; j <= s; j++){
			dp[i][j] = dp[i-1][j];
			int ptr = 0;
			int used = 0;
			int cursum = 0;
			int tmpused = 0;
			while(ptr < items[i].size() && i*(used+1) <= j){
				cursum += items[i][ptr].first;
				used++;
			//	printf("%d %d %d %d\n", cursum, j+i*used, dp[i][j]+cursum, dp[i+1][j+i*used]);
				if(dp[i-1][j-i*used] != -1){ 
					dp[i][j] = max(dp[i-1][j-i*used]+cursum, dp[i][j]);
				}
				tmpused++;
				if(tmpused == items[i][ptr].second){
					tmpused = 0;
					ptr++;
				}

			}
		}
	}
	int ans = -1;
	for(int i = 0; i <= s+1; i++){
		ans = max(ans, dp[s][i]);
	}
	cout << ans << endl;
}

Compilation message (stderr)

knapsack.cpp: In function 'int32_t main()':
knapsack.cpp:27:14: warning: comparison of integer expressions of different signedness: 'long long int' and 'std::vector<std::pair<long long int, long long int> >::size_type' {aka 'long unsigned int'} [-Wsign-compare]
   27 |    while(ptr < items[i].size() && i*(used+1) <= j){
      |          ~~~~^~~~~~~~~~~~~~~~~
#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...