40分求助
查看原帖
40分求助
1060199
FcyTheFcy楼主2024/11/2 23:09

提交记录

#include<cstdio>
#include<iostream>
#include<algorithm>
#include<set>
using namespace std;
typedef long long ll;
const int maxn=107;
int n,a[maxn],ad[maxn];
ll f[maxn][maxn];
char opt;
int main(){
	scanf("%d",&n);
	for(int i=1;i<=n;i++){
		cin>>opt;
		ad[i]=(opt=='t');
		scanf("%d",&a[i]);
	}
	int n2=n<<1;
	for(int i=n+1;i<=n2;i++){
		a[i]=a[i-n];
		ad[i]=ad[i-n];
	}
	for(int i=1;i<=n2;i++)
		f[i][i]=a[i];
	for(int len=2;len<=n;len++)
		for(int l=1,r=len;r<=n2;l++,r++)
			for(int k=l;k<r;k++)
				if(ad[k+1]){
					if(f[l][k]+f[k+1][r]>=f[l][r]){
						f[l][r]=f[l][k]+f[k+1][r];
						
					}
				}
				else
					f[l][r]=max(f[l][r],f[l][k]*f[k+1][r]);
	ll ans=0;
	for(int i=1;i<=n;i++)
		ans=max(ans,f[i][i+n-1]);
	printf("%lld\n",ans);
	for(int i=1;i<=n;i++)
		if(ans==f[i][i+n-1])
			printf("%d ",i);
	return 0;
}
2024/11/2 23:09
加载中...