初步测试以下递归算法可行:
int score(int **a, int n, int m)
{
if (n < 0)
{
return 0;
}
if (m<0 || m>2)
{
return -INF;
}
int res = 0;
int *s = new int[3];
for (int i = 0; i < 3; i++)
{
if (a[n][m] == 0)
{
s[i] = -score(a, n - 1, m + i - 1);
}
else
{
s[i] = a[n][m] + score(a, n - 1, m + i - 1);
}
}
res = s[0];
for (int i = 0; i < 3; i++)
{
if (s[i]>res)
{
res = s[i];
}
}
return res;
} 主函数:
int main()
{
int n;
cin >> n;
int **a = new int*[n];
for (int i = 0; i < n; i++)
{
a[i] = new int[3];
for (int j = 0; j < 3; j++)
{
cin >> a[i][j];
}
}
int *res = new int[3];
for (int i = 0; i < 3; i++)
{
res[i] = score(a, n - 1, i);
}
int result = res[0];
for (int i = 0; i < 3; i++)
{
if (res[i]>result)
{
result = res[i];
}
}
cout << result << endl;
system("pause");
return 0;
}