首页 > 其他分享 >P4342

P4342

时间:2024-10-16 19:45:53浏览次数:1  
标签:150 return int P4342 inf 105

这题治好了我的快读恐惧症,让我理解了cin的力量
cin,照亮世界!

#include<bits/stdc++.h>
using namespace std;
const int inf=0x3f3f3f3f;
int n,ans=-inf;
int a[105];
int f[150][150],g[150][150];
char c[105];
int max(int x,int y){return (x>y)?(x):(y);}
int min(int x,int y){return (x<y)?(x):(y);}
int main(){
	ios::sync_with_stdio(0);
	cin.tie(0);
	cout.tie(0);
    cin>>n;
    for(int i=1;i<=n;i++){
    	cin>>c[i]>>a[i];
        a[n+i]=a[i];
		c[n+i]=c[i];
    }
    for(int i=1;i<=(n<<1);i++)for(int j=1;j<=(n<<1);j++)f[i][j]=-inf,g[i][j]=inf;
    for(int i=1;i<=(n<<1);i++)f[i][i]=g[i][i]=a[i];
    for(int len=2;len<=n;len++){
        for(int i=1,j=len;j<=(n<<1);i++,j++){
            for(int k=i;k<j;k++){
                if(c[k+1]=='x'){
                    f[i][j]=max(f[i][j],max(f[i][k]*f[k+1][j],max(g[i][k]*g[k+1][j],max(f[i][k]*g[k+1][j],g[i][k]*f[k+1][j]))));
                    g[i][j]=min(g[i][j],min(f[i][k]*f[k+1][j],min(g[i][k]*g[k+1][j],min(f[i][k]*g[k+1][j],g[i][k]*f[k+1][j]))));
                }else if(c[k+1]=='t'){
                    f[i][j]=max(f[i][j],f[i][k]+f[k+1][j]);
                    g[i][j]=min(g[i][j],g[i][k]+g[k+1][j]);
                }
            }
        }
    }
    for(int i=1;i<=n;i++)ans=max(ans,f[i][i+n-1]);
	cout<<ans<<'\n';
    for(int i=1;i<=n;i++)if(f[i][i+n-1]==ans)cout<<i<<' ';
    return 0;
}

标签:150,return,int,P4342,inf,105
From: https://www.cnblogs.com/zan-mei-tai-yang/p/18470625

相关文章

  • 洛谷题单指南-动态规划3-P4342 [IOI1998] Polygon
    原题链接:https://www.luogu.com.cn/problem/P4342题意解读:环中节点表示数字,边表示运算符,可以任意断一条边,其余节点两两按边的符号计算,求结果的最大值,以及最大值是断开那些边可以得到。解题思路:题意中有几个个关键信息:环形,节点数为n,边数为n任意断一条边,即可以从任意节点开始,......
  • luogu P4342[IOI1998]Polygon
    阅读前需深剖析分系列是记录我个人的做题思路,实现过程的全面分析,存在内容可靠、思路健全、分析到位、试错纠错等优于一般题解的特征,其中,Quest部分表示探索问题,我会在此提出做题时的想法、问题,并在内容中得到解决,因此建议从上到下按序浏览,以防出现思路断层,内容不衔接的情况,感谢理......
  • P4342 [IOI1998] Polygon
    原题链接题解最近做的题目有点多,感觉没什么好讲的,某个最大值一定是由连续区间上的节点操作后得来的\(Code\)#include<bits/stdc++.h>usingnamespacestd;intf[105][105][2];intmain(){memset(f,-0x3f3f3f,sizeoff);intn;cin>>n;charop[105];......
  • P4342 [IOI1998]Polygon
    给定一个多边形,边上有符号,为\(+\)或\(\times\),点上有权值。先断掉一条边变成链,再在其他边上进行缩边,将两个点变为一个点,权值为两点做边上的运算。求最大值和最大值对应......