Submission #1011212

#TimeUsernameProblemLanguageResultExecution timeMemory
1011212ef10Cloud Computing (CEOI18_clo)C++17
100 / 100
644 ms2392 KiB
// Source: https://usaco.guide/general/io

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

#define LL long long

LL N, M;
tuple<LL,LL,LL> A[4005];

int main() {
	cin >> N;
	LL maxc = 0;
	for (LL i = 1; i <= N; i++) {
		LL a,b,c; cin >> a >> b >> c;
		A[i] = make_tuple(a,b,-c);
		maxc += a;
	}
	cin >> M;
	for (LL i = N+1; i <= N+M; i++) {
		LL a,b,c; cin >> a >> b >> c;
		A[i] = make_tuple(-a,b,c);
	}
	sort(A+1, A+N+M+1, [](const tuple<LL,LL,LL>& a, const tuple<LL,LL,LL>& b) {
		return (get<1>(a) > get<1>(b)) || (get<1>(a) == get<1>(b) && get<0>(a) > get<0>(b));
	});
	//for (LL i = 1; i <= A)
	LL dp[2][maxc+1]; memset(dp,0,sizeof(dp));
	bool bp[2][maxc+1]; memset(bp,0,sizeof(bp));
	LL ind;
	for (LL i = 1; i <= N+M; i++) {
		ind = i % 2;
		LL oi = (i+1) % 2;
		if (get<0>(A[i]) > 0) {
			if (bp[ind][get<0>(A[i])]) {
				dp[ind][get<0>(A[i])] = max(dp[ind][get<0>(A[i])], get<2>(A[i]));
			} else {
				dp[ind][get<0>(A[i])] = get<2>(A[i]);
				bp[ind][get<0>(A[i])] = true;
			}
		}
		for (LL j = 0; j <= maxc; j++) {
			if (bp[oi][j]) {
				if (bp[ind][j]) {
					dp[ind][j] = max(dp[ind][j], dp[oi][j]);
				} else {
					bp[ind][j] = true;
					dp[ind][j] = dp[oi][j];
				}
			}
			if (bp[oi][j] && j + get<0>(A[i]) >= 0) {
				if (bp[ind][j + get<0>(A[i])]) {
					dp[ind][j + get<0>(A[i])] = max(dp[ind][j + get<0>(A[i])], dp[oi][j] + get<2>(A[i]));
				} else {
					bp[ind][j + get<0>(A[i])] = true;
					dp[ind][j + get<0>(A[i])] = dp[oi][j] + get<2>(A[i]);
				}
			}
		}
		memset(dp[oi],0,sizeof(dp[oi]));
		memset(bp[oi],0,sizeof(bp[oi]));
	}
	LL res = 0;
	for (LL i = 0; i <= maxc; i++) {
		if (bp[ind][i]) {
			res = max(res,dp[ind][i]);
		}
	}
	cout << res << endl;
}

Compilation message (stderr)

clo.cpp: In function 'int main()':
clo.cpp:30:5: warning: 'ind' may be used uninitialized in this function [-Wmaybe-uninitialized]
   30 |  LL ind;
      |     ^~~
#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...