216862026-01-13 18:05:53algoproBenzinkút üzemeltetés (55)cpp17Elfogadva 55/552ms500 KiB
// UUID: f21815c3-1154-4139-8343-62e8a2aad2db
#include <bits/stdc++.h>
#include <vector>
using namespace std;

int main() {
	int n, k;
	cin >> n >> k;
	vector<int> dp (n + 1, 0);
	vector<int> kutak (n + 1);
	vector<int> profit (n + 1);
	vector<int> elozo (n + 1, -1);
	vector<int> megoldasok;
	for (int i = 1; i <= n; i++) {
		cin >> kutak[i];
		cin >> profit[i];
	}

	for (int i = 1; i <= n; i++) {
		int legn = -1;
		int legnindex = 0;
		for (int j = 1; j < i; j++) {
			if (kutak[i] - kutak[j] >= k) {
				if (dp[j] > legn) {
					legn = dp[j];
					legnindex = j;
				}
			}
		}
		
		if (dp[legnindex] + profit[i] > dp[i - 1]) {
			dp[i] = dp[legnindex] + profit[i];
			elozo[i] = legnindex;
		} else {
			dp[i] = dp[i - 1];
		}
	}
	
	int i = n;
	while (i != 0) {
		if (dp[i - 1] == dp[i]) {
			i--;
		} else {
			megoldasok.push_back(i);
			i = elozo[i];
		}
	}

	reverse(megoldasok.begin(), megoldasok.end());

	cout << dp[n] << endl;
	cout << megoldasok.size() << " ";
	for (int i : megoldasok) {
		cout << i << " ";
	}
}
RészfeladatÖsszpontTesztVerdiktIdőMemória
base55/55
1Elfogadva0/01ms316 KiB
2Elfogadva0/02ms500 KiB
3Elfogadva3/31ms316 KiB
4Elfogadva3/31ms316 KiB
5Elfogadva3/31ms400 KiB
6Elfogadva3/31ms316 KiB
7Elfogadva3/31ms316 KiB
8Elfogadva3/31ms316 KiB
9Elfogadva3/31ms316 KiB
10Elfogadva3/31ms316 KiB
11Elfogadva3/31ms316 KiB
12Elfogadva3/32ms316 KiB
13Elfogadva4/41ms316 KiB
14Elfogadva4/42ms408 KiB
15Elfogadva5/52ms408 KiB
16Elfogadva6/62ms316 KiB
17Elfogadva6/62ms316 KiB