60分求调
查看原帖
60分求调
1512992
sswc楼主2025/7/30 16:56
#include <bits/stdc++.h>
const int N = 5010;
using namespace std;
int chu[200],shu[200][200],suan[200][200],dp[2][200][200];
int ji1(int bian,int l1,int r1)
{
   return max(dp[0][bian][bian]*dp[0][l1][r1],max(dp[1][bian][bian]*dp[1][l1][r1],max(dp[0][bian][bian]*dp[1][l1][r1],dp[1][bian][bian]*dp[0][l1][r1])));
}
int ji2(int bian,int l1,int r1)
{
   return min(dp[0][bian][bian]*dp[0][l1][r1],min(dp[1][bian][bian]*dp[1][l1][r1],min(dp[0][bian][bian]*dp[1][l1][r1],dp[1][bian][bian]*dp[0][l1][r1])));
}
int main()
{
    ios::sync_with_stdio(false), cin.tie(0), cout.tie(0);
    int n;
    cin>>n;
    for(int i=1;i<=2*n;i+=2)
    {
        char f;
        int e,F;
        cin>>f>>e;
        if(f=='t') F=1;
        else F=2;
        chu[i]=F;
        chu[i+1]=e;
    }
    for(int i=1;i<=2*n;i+=2)
    {
        int cnt=1;
        for(int j=i-1;j>1;j-=2)
        {
            shu[i/2+1][cnt]=chu[j];
            suan[i/2+1][cnt]=chu[j-1];
            cnt++;
        }
        for(int j=2*n;j>i;j-=2)
        {
            shu[i/2+1][cnt]=chu[j];
            if(j-1>i) suan[i/2+1][cnt]=chu[j-1];
            cnt++;
        }
    }
    map<int,int>p;
    int Max=-1e7;
    for(int cnt=1;cnt<=n;cnt++)
    {
        for(int i=1;i<=n;i++)
        {
            for(int j=1;j<=n;j++)
            {
                if(i==j) dp[0][i][j]=dp[1][i][j]=shu[cnt][i];
                else
                {
                    dp[0][i][j]=0;
                    dp[1][i][j]=0;
                }
            }
        }

        for(int len=2;len<=n;len++)
        {
            for(int l=1;l+len-1<=n;l++)
            {
                int r=l+len-1;
                int e1,e2;
                if(suan[cnt][l]==1) e1=dp[1][l][l]+dp[1][l+1][r];
                else e1=ji1(l,l+1,r);
                if(suan[cnt][r-1]==1) e2=dp[1][l][r-1]+dp[1][r][r];
                else e2=ji1(r,l,r-1);
                dp[1][l][r]=max(e1,e2);
                int e3,e4;
                if(suan[cnt][l]==1) e3=dp[0][l][l]+dp[0][l+1][r];
                else e3=ji2(l,l+1,r);
                if(suan[cnt][r-1]==1) e4=dp[0][l][r-1]+dp[0][r][r];
                else e4=ji2(r,l,r-1);
                dp[0][l][r]=min(e3,e4);
            }
        }
        p[cnt]=dp[1][1][n];
        Max=max(Max,dp[1][1][n]);
    }
    cout<<Max<<endl;
    for(auto it:p)
    {
        if(it.second==Max) cout<<it.first<<" ";
    }
}
2025/7/30 16:56
加载中...