80分求助!
查看原帖
80分求助!
430663
RUO_22703楼主2022/3/16 10:47
#include<bits/stdc++.h>
#define N 205
#define oo 2147483647
#define R read()
#define W(x) write(x)
#define P(x) putchar(x)
#define G getchar()
using namespace std;
inline int read(){int x=0,f=1;char ch=G;while(ch<'0'||ch>'9'){if(ch=='-') f=-1;ch=G;}while(ch>='0'&&ch<='9'){x=(x<<1)+(x<<3)+(ch^48);ch=G;}return x*f;}
inline void write(int x){if(x<0){P('-');x=-x;}if(x>9) write(x/10);P(48+x%10);}
int n,a[N],fax[N][N],fin[N][N],ans,maxx[N];
bool op[N];
int main(){
	n=R;
	for(int i=1;i<=n;i++){
		char ch;
		scanf("%c",&ch);
		if(ch=='t') op[i]=1;
		a[i]=R;
		a[i+n]=a[i];
		op[i+n]=op[i];
	}
//	for(int i=1;i<=(n<<1);i++){W(a[i]);P(' ');}
//	P('\n');
//	for(int i=1;i<=(n<<1);i++){W(op[i]);P(' ');}
	memset(fax,0,sizeof(fax));
	for(int i=1;i<=(n<<1);i++) for(int j=1;j<=(n<<1);j++) fin[i][j]=oo;
	for(int i=1;i<=(n<<1);i++){fax[i][i]=a[i];fin[i][i]=a[i];}
	for(int l=2;l<=n;l++){
		for(int i=1;i+l-1<=(n<<1);i++){
			int j=i+l-1;
//				for(int i=1;i<=(n<<1);i++){for(int j=1;j<=(n<<1);j++){W(fax[i][j]);P('\t');}P('\n');}
//				P('\n');
//				for(int i=1;i<=(n<<1);i++){for(int j=1;j<=(n<<1);j++){W(fin[i][j]);P('\t');}P('\n');}
//				P('\n');
			for(int k=i;k<j;k++){
				if(op[k+1]){
					fax[i][j]=max(fax[i][j],fax[i][k]+fax[k+1][j]);
					fin[i][j]=min(fin[i][j],fin[i][k]+fin[k+1][j]);
				}else{
					fax[i][j]=max(max(fax[i][j],fax[i][k]*fax[k+1][j]),max(max(fax[i][k]*fin[k+1][j],fin[i][k]*fin[k+1][j]),fin[i][k]*fax[k+1][j]));
					fin[i][j]=min(min(fin[i][j],fax[i][k]*fax[k+1][j]),min(min(fax[i][k]*fin[k+1][j],fin[i][k]*fin[k+1][j]),fin[i][k]*fax[k+1][j]));
				}
			}
				
		}
	}
//	for(int i=1;i<=(n<<1);i++){for(int j=1;j<=(n<<1);j++){W(fax[i][j]);P('\t');}P('\n');}
//	P('\n');
//	for(int i=1;i<=(n<<1);i++){for(int j=1;j<=(n<<1);j++){W(fin[i][j]);P('\t');}P('\n');}
//	P('\n');
	for(int i=1;i<=n;i++) ans=max(fax[i][n+i-1],ans);
	W(ans);P('\n');
	for(int i=1;i<=n;i++) if(fax[i][n+i-1]==ans){W(i);P(' ');}
	return 0;
}
2022/3/16 10:47
加载中...