제출 #737043

#제출 시각아이디문제언어결과실행 시간메모리
737043minhcool메기 농장 (IOI22_fish)C++17
52 / 100
934 ms295304 KiB
#include<bits/stdc++.h>
using namespace std;

//#define int long long
#define fi first
#define se second
#define pb push_back
#define mp make_pair

typedef pair<int, int> ii;
typedef pair<ii, int> iii;
typedef pair<ii, ii> iiii;

const int N = 3e3 + 5;

const int oo = 1e18 + 7, mod = 1e9 + 7;

int n, m;

long long val[N][N], pref[N][N];

// dp[row_i][row_j][i - 1 > or = or <]
long long dp[N][N][2];

long long max_weights(int _n, int _m, vector<int> _x, vector<int> _y, vector<int> _w){
	n = _n, m = _m;
	for(int i = 0; i < m; i++){
		val[_x[i] + 1][_y[i] + 1] += (long long)_w[i];
	}
	for(int i = 1; i <= n; i++){
		for(int j = 1; j <= n; j++) pref[i][j] = pref[i][j - 1] + val[i][j];
	}
	for(int i = 0; i <= n; i++){
		for(int j = 0; j <= n; j++){
			dp[i][j][0] = dp[i][j][1] = -oo;
		}
	}
	//dp[0][0][0] = 0;
	//15206896898496
	for(int i = 0; i <= n; i++){
		//dp[2][i][0] = pref[1][i];// 0 -> <=
		//dp[2][i][1] = pref[2][i;
		dp[1][i][0] = 0;
	}
	for(int i = 2; i <= n + 1; i++){
		// calculate (i - 1)
		long long maximum = -oo;
		for(int nxt = 0; nxt <= n; nxt++){
			maximum = max(maximum, dp[i - 1][nxt][0] - pref[i - 1][nxt]);
			dp[i][nxt][0] = max(dp[i][nxt][0], maximum + pref[i - 1][nxt]);
		}
		maximum = -oo;
		for(int nxt = n; nxt >= 0; nxt--){
			dp[i][nxt][1] = max(dp[i][nxt][1], maximum - pref[i][nxt]);
			maximum = max(maximum, dp[i - 1][nxt][1] + pref[i][nxt]);
		}
		for(int lst = 0; lst <= n; lst++){
			// 0 - 0
			/*
			for(int nxt = lst; nxt <= n; nxt++){
				dp[i][nxt][0] = max(dp[i][nxt][0], dp[i - 1][lst][0] + (pref[i - 1][nxt] - pref[i - 1][lst]));
			}
			// 1 - 1
			for(int nxt = lst - 1; nxt >= 0; nxt--){
				dp[i][nxt][1] = max(dp[i][nxt][1], dp[i - 1][lst][1] + pref[i][lst] - pref[i][nxt]);	
			}*/
			// 0 - 1
			if(lst == n){
				for(int nxt = 0; nxt < n; nxt++) dp[i][nxt][1] = max(dp[i][nxt][1], dp[i - 1][n][0] + pref[i][n] - pref[i][nxt]);
			}
			// 1 - 0
			if(!lst){
				dp[i][0][0] = max(dp[i][0][0], dp[i - 1][0][1]);
				for(int nxt = 1; nxt <= n; nxt++) dp[i][nxt][0] = max(dp[i][nxt][0], max(dp[i - 1][0][0] + pref[i - 1][nxt], dp[i - 1][0][1]));
			}
		}
	}
	return max(dp[n + 1][0][0], dp[n + 1][0][1]);
}

/*
void process(){
	int n, m;
	vector<int> a, b, c;
	cin >> n >> m;
	for(int i = 1; i <= m; i++){
		int x, y, z;
		cin >> x >> y >> z;
		a.pb(x), b.pb(y), c.pb(z);
	}
	cout << max_weights(n, m, a, b, c) << "\n";
}
 
signed main(){
	ios_base::sync_with_stdio(0);
	freopen("fish.inp", "r", stdin);
	//freopen("fish.out", "w", stdout);
	//cout << "OK\n";
	//return 0;
	process();
}*/

컴파일 시 표준 에러 (stderr) 메시지

fish.cpp:16:21: warning: overflow in conversion from 'double' to 'int' changes value from '1.0e+18' to '2147483647' [-Woverflow]
   16 | const int oo = 1e18 + 7, mod = 1e9 + 7;
      |                ~~~~~^~~
#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...