Submission #1163491

#TimeUsernameProblemLanguageResultExecution timeMemory
1163491gelastropodAkcija (COCI21_akcija)C++20
30 / 110
19 ms31816 KiB
#include <bits/stdc++.h>
using namespace std;
#define int long long

signed main() {
	int n, k, a, b;
	cin >> n >> k;
	vector<vector<int>> vals(n + 1, vector<int>());
	vector<pair<int, int>> valss;
	for (int i = 0; i < n; i++) {
		cin >> a >> b;
		vals[b].push_back(a);
		valss.push_back({b, a});
	}
	sort(valss.begin(), valss.end());
	for (int i = 1; i <= n; i++)
		sort(vals[i].begin(), vals[i].end());
	vector<vector<int>> dp(n, vector<int>(n + 1, LLONG_MAX));
	for (int i = 0; i < n; i++) {
		if (i == 0) {
			dp[0][0] = 0;
			int crntsum = 0;
			for (int j = 0; j < min((int)vals[i + 1].size(), i + 1); j++) {
				crntsum += vals[i + 1][j];
				dp[i][j + 1] = crntsum;
			}
			continue;
		}
		int crntsum = 0;
		dp[i][0] = 0;
		for (int j = 0; j < (int)vals[i + 1].size(); j++) {
			crntsum += vals[i + 1][j];
			for (int k = j + 1; k <= i + 1; k++) {
				if (dp[i - 1][k - j - 1] == LLONG_MAX) continue;
				dp[i][k] = min(dp[i][k], dp[i - 1][k - j - 1] + crntsum);
			}
		}
		for (int j = 0; j <= n; j++) {
			dp[i][j] = min(dp[i][j], dp[i - 1][j]);
		}
	}
	for (int i = n; i >= 0; i--) {
		if (dp.back()[i] != LLONG_MAX) {
			cout << i << ' ' << dp.back()[i] << '\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...
#Verdict Execution timeMemoryGrader output
Fetching results...