求助
查看原帖
求助
696996
restart_to_revive楼主2025/1/15 21:30
#include<bits/stdc++.h>
using namespace std;
long long l[1001];
const int MOD=998244353;
long long dp[1001][1001][2];
long long qpow(long long x,long long y) { //quick pow
	if(x==0 and y==0) return 0;
	if(y == 1) {
		return x;
	}
	long long p = qpow(x,y / 2);
	p *= p;
	p %= MOD;
	if(y % 2 == 1) {
		p *= x;
		p %= MOD;
	}
	return p;
}
int main() {
	int t;
	cin>>t;
	int len;
	for(int k=0; k<t; k++) {
		cin>>len;
		for(int i=1; i<=len; i++) {
			cin>>l[i];
		}
		memset(dp,0,sizeof(0));
		for(int n=len; n>=1; n--) {
			for(int i=1; i<=len-n+1; i++) { //start point
				int j=i+n-1;//till point
				dp[i][j][0]=max(dp[i-1][j][0]+qpow(l[i-1],l[i]),dp[i][j+1][1]+qpow(l[j+1],l[i]));
				dp[i][j][1]=max(dp[i-1][j][0]+qpow(l[i-1],l[j]),dp[i][j+1][1]+qpow(l[j+1],l[j]));
			}
		}
		long long ans=0;
		for(int i=1; i<=len; i++) {
			ans=max(ans,max(dp[i][i][0],dp[i][i][1]));
		}
		cout<<ans<<'\n';
	}
	return 0;
}

MLE on #8 悬2关

2025/1/15 21:30
加载中...