萌新刚学栈溢出
查看原帖
萌新刚学栈溢出
107232
twelveZ楼主2020/9/28 23:40

rt, 这题洛谷ac,老师出的数据范围一模一样的题栈溢出了,求如何解决

#include <cstdio>
#include <cstring>

const int N = 100005;

int a[N][4];
int n;
int ans;
int max (int a, int b) {
	return a > b ? a : b;
}
int mem[N][4][4][4];
int search (int step, int fir, int las, int llas) {
	if (mem[step][fir][las][llas] != -1)
		return mem[step][fir][las][llas];
	if (step == n + 1) {
		if (las > fir && las > llas)
			return 0;
		if (las < fir && las < llas)
			return 0;
		return -2147483647;
	}
	int res = 0;
	if (llas > las) {
		for (int i = las + 1; i <= 3; i ++)
			res = max(res, search(step + 1, fir, i, las) + a[step][i]);
	}
	if (llas < las) {
		for (int i = las - 1; i >= 1; i --)
			res = max(res, search(step + 1, fir, i, las) + a[step][i]);
	}
	return mem[step][fir][las][llas] = res;
}

int main () {
	memset(mem, -1, sizeof(mem));
	scanf ("%d", &n);
	for (int i = 1; i <= n; i ++) {
		for (int j = 1; j <= 3; j ++) {
			scanf ("%d", &a[i][j]);
		}
	}
	for (int i = 1; i <= 3; i ++) {
		for (int j = 1; j <= 3; j ++) {
			if (i != j) {
				ans = max(ans, search(3, i, j, i) + a[1][i] + a[2][j]);
			}
		}
	}
	printf ("%d", ans);
} 

2020/9/28 23:40
加载中...