1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48
|
#include<bits/stdc++.h> using namespace std; #define int long long int mod=998244353; int quickpow(int x,int y) { if(x==0&&y==0)return 0; int ans=1,p=x; while(y>0) { if(y&1)ans=(ans*p)%mod; p=(p*p)%mod; y>>=1; } return ans; } int dp[1009][1009][2],a[1009],n; signed main() { int t; cin>>t; while(t--) { cin>>n; for(int i=1;i<=n;i++) { cin>>a[i]; } memset(dp,0,sizeof(0)); for(int len=n;len>=1;len--) { for(int i=1;i<=n-len+1;i++) { int j=i+len-1; dp[i][j][0]=max(dp[i-1][j][0]+quickpow(a[i-1],a[i]),dp[i][j+1][1]+quickpow(a[j+1],a[i])); dp[i][j][1]=max(dp[i-1][j][0]+quickpow(a[i-1],a[j]),dp[i][j+1][1]+quickpow(a[j+1],a[j])); } } int ans=0; for(int i=1;i<=n;i++) ans=max({ans,dp[i][i][0],dp[i][i][1]}); cout<<ans<<endl; } return 0; }
|