Submission #1336086

#TimeUsernameProblemLanguageResultExecution timeMemory
1336086gohchingjaykCatfish Farm (IOI22_fish)C++20
0 / 100
1136 ms2162688 KiB
#include "fish.h"

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

long long max_weights(int N, int M, std::vector<int> X, std::vector<int> Y,
                      std::vector<int> W) {

	using ll = long long;
	#define int ll

	int maxY = *max_element(Y.begin(), Y.end()) + 2;

	vector<vector<int>> colPrefSum(N, vector<int>(N));
	vector<vector<int>> fish(N, vector<int>(N));
	for (int i = 0; i < M; ++i) {
		fish[X[i]][Y[i]] = W[i];
	}
	
	for (int i = 0; i < N; ++i) {
		for (int j = 0; j < N; ++j) {
			colPrefSum[i][j] = (j ? colPrefSum[i][j-1] : 0) + fish[i][j];
		}
	}
	
	auto range_sum = [&](int x, int l, int r) {
		if (x < 0) return 0ll;
		if (l < 0) return 0ll;
		return colPrefSum[x][r] - (l ? colPrefSum[x][l-1] : 0ll);
	};
	
	vector<vector<int>> dp_prev(maxY, vector<int>(maxY));
	vector<vector<int>> dp_curr(maxY, vector<int>(maxY));

	for (int i = 0; i < N; ++i) {
		swap(dp_prev, dp_curr);
		
		for (int j = 0; j < maxY; ++j) {
			for (int k = 0; k < maxY; ++k) {
				
				dp_curr[j][k] = 0;
				
				for (int l = 0; l < maxY; ++l) {
					if (j < k) {
						dp_curr[j][k] = max(dp_curr[j][k], dp_prev[l][j] + max(range_sum(i-1, max(l, j) - 1, k), 0ll));
					}
					else {
						dp_curr[j][k] = max(dp_curr[j][k], dp_prev[l][j] + range_sum(i, j-1, k));
					}
				}
			}
		}
	}
	
	int ans = -1e18 - 5;
	for (int i = 0; i < maxY; ++i) for (int j = 0; j < maxY; ++i) ans = max(ans, dp_curr[i][j]);
	
	return ans;
}
#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...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...