求大佬指点
查看原帖
求大佬指点
1020359
29431_com楼主2024/3/10 10:05

是代码细节哪里有问题还是说思路根本是错的,求指点

#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;
}
2024/3/10 10:05
加载中...