是代码细节哪里有问题还是说思路根本是错的,求指点
#include<vector>
#include<iostream>
#include<algorithm>
using namespace std;
#define int long long
const int mod = 998244353ll;
int pow(int a,int b)
{
if(a==-1)
return 0;
int ans=1;
while(b)
{
if(b&1)
ans=(ans*a)%mod;
a=(a*a)%mod;
b>>=1;
}
return ans;
}
signed main()
{
int T;
cin>>T;
while(T--)
{
int n;
cin>>n;
vector<int>A(n+2,-1);
for(int i = 1 ; i <= n ;i++)
cin>>A[i];
vector<vector<vector<int>>>DP(n+2,vector<vector<int>>(n+2,vector<int>(2,0)));
int MAX=0;
for(int len=n;len>=1;len--)
{
for(int i = 1 ; i+len-1 <= n; i++)
{
DP[i][i+len-1][0]=max(DP[i-1][i+len-1][0]+pow(A[i-1],A[i]),DP[i][i+len][1]+pow(A[i+len],A[i]));
DP[i][i+len-1][1]=max(DP[i-1][i+len-1][0]+pow(A[i-1],A[i+len-1]),DP[i][i+len][1]+pow(A[i+len],A[i+len-1]));
MAX=max({MAX,DP[i][i+len-1][0],DP[i][i+len-1][1]});
}
}
cout<<MAX<<endl;
}
return 0;
}