蓝桥上的一道题,思路参考《拉不拉东的算法小抄》但是不知道为何就过了一组测试数据,若有了解的大佬请评论区留言,感谢~
#include <iostream>
using namespace std;
// pair类型的二维数组
int dp1[1000][1000];
int dp2[1000][1000];
int game(int piles[100],int n)
{
for (int i = 0; i < n; i++)
{
for (int j = i; j < n; j++)
{
dp1[i][j] = 0;
dp2[i][j] = 0;
}
}
//初始化二维数组对角线
for (int i = 0; i < n; i++)
{
dp1[i][i] = piles[i];
dp2[i][i] = 0;
}
//斜着遍历二维数组
for (int l = 2; l <= n; l++)
{
for (int i = 0; i <= n - l; i++)
{
int j = l + i - 1;
int left = piles[i] + dp2[i + 1][j];
int right = piles[j] + dp2[i][j - 1];
if (left > right)
{
dp1[i][j] = right;
dp2[i][j] = dp1[i + 1][j];
}
else
{
dp1[i][j] = right;
dp2[i][j] = dp1[i][j - 1];
}
}
}
return dp1[0][n - 1];
}
int main()
{
int n;
int piles[1000];
cin >> n;
for (int i = 0; i < n; i++)
{
cin >> piles[i];
}
cout << game(piles,n);
return 0;
}