TLE求调
查看原帖
TLE求调
561833
DarkShadow楼主2024/7/17 10:47
#include <bits/stdc++.h>
#define ll unsigned long long
using namespace std;
const int N=1005;
int T,n;
inline ll read(){
	ll ans=0;
	char ch=0;
	while(ch<'0'||ch>'9')  ch=getchar();
	while(ch>='0'&&ch<='9'){
		ans*=10ll,ans+=(ll)(ch-'0');
		ch=getchar();
	}
	return ans;
}
inline void print(ll a){
	int d[15],p=0;
	do  d[++p]=a%10ll,a/=10ll;
	while(a>0);
	for(int i=p;i>=1;i--)
		putchar(d[i]+'0');
}
ll mod=998244353ll,dp[N][N][2],d[N];
ll qpow(ll a,ll b){
	if(a==0ll&&b==0ll)  return 0ll;
	if(b==0)  return 1ll;
	ll ans=qpow(a,b/2ll);
	ans*=ans,ans%=mod;
	if(b%2ll==1ll)  ans*=a,ans%=mod;
	return ans;
}
int main(){
	T=read();
	while(T--){
		n=read();
		for(int i=1;i<=n;i++)
			d[i]=read();
		for(int i=1;i<=n;i++)
			for(int j=1;j<=n;j++)
				dp[i][j][0]=dp[i][j][1]=0ll;
		for(int len=2,r;len<=n;len++)
			for(int l=1;l+len-1<=n;l++){
				r=len+l-1;
				dp[l][r][0]=max(dp[l+1][r][0]+qpow(d[l],d[l+1]),dp[l+1][r][1]+qpow(d[l],d[r]));
				dp[l][r][1]=max(dp[l][r-1][0]+qpow(d[r],d[l]),dp[l][r-1][1]+qpow(d[r],d[r-1]));
			}
		print(max(dp[1][n][0],dp[1][n][1]));
		putchar('\n');
	}
	return 0;
}
2024/7/17 10:47
加载中...