?样例输出少了个1
查看原帖
?样例输出少了个1
754006
mobaiawa楼主2023/10/19 19:52
#include<bits/stdc++.h>
using namespace std;
const int N=110;
int fmx[N][N],fmn[N][N],si[N],num[N];
int cm(int l,int r,int k,int f[N][N]){
	//cout<<l<<" "<<k<<"  "<<k+1<<" "<<r<<" "<<f[l][k]<<((si[k+1]==1)?"+":"*" )<<f[k+1][r]<<endl;
	/* + */if(si[k+1]==1)return f[l][k]+f[k+1][r]; 
	/* * */if(si[k+1]==2)return f[l][k]*f[k+1][r];
}
void dpmx(int l,int r){
	for(int k=l;k<=r;k++){
		fmx[l][r]=max(max(cm(l,r,k,fmx),cm(l,r,k,fmn)),fmx[l][r]);
	}
}
void dpmn(int l,int r){
	for(int k=l;k<=r;k++){
		fmn[l][r]=min(cm(l,r,k,fmn),fmn[l][r]);
	}
}
void dp(int l,int r){
	for(int i=l;i<=r;i++){
		for(int j=i;j<=r;j++){
			if(i==j){
				////fmx[i][j]=fmn[i][j]=num[i];
				continue;
			}
			////if(i+1==j){
				////fmx[l][r]=max(max(cm(l,r,k,fmx),cm(l,r,k,fmn)),fmx[i][j]);
			////}
			//else{
				dpmx(i,j);
				dpmn(i,j);
			//}
		}
	}
}
int main(){
	int n;
	cin>>n;
	for(int i=1;i<=n;i++){
		char s;
		cin>>s;
		cin>>num[i];
		fmx[i+n][i+n]=fmn[i+n][i+n]=fmn[i][i]=fmx[i][i]=num[i];
		if(s=='t')si[i]=si[i+n]=1;
		if(s=='x')si[i]=si[i+n]=2;
	}
	dp(1,n*2);
	int maxn=0;
	for(int i=1;i<=n;i++){
		maxn=max(fmx[i][i+n-1],maxn);
		//cout<<fmx[i][i+n-1]<<endl;
	}
	cout<<maxn<<endl;
	for(int i=1;i<=n;i++){
		if(fmx[i][i+n-1]==maxn){
			cout<<i<<" ";
		}
	}
	return 0;
}

注释里有输出的是测试哦

输入

4
t -7 t 4 x 2 x 5

输出

33
2 

2023/10/19 19:52
加载中...