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);
}