社区讨论

60pts求条

P4342[IOI 1998] Polygon参与者 1已保存回复 0

讨论操作

快速查看讨论及其快照的属性,并进行相关操作。

当前回复
0 条
当前快照
1 份
快照标识符
@mkm1rdig
此快照首次捕获于
2026/01/20 11:41
2 个月前
此快照最后确认于
2026/01/20 21:40
2 个月前
查看原帖
CPP
#include<bits/stdc++.h>
using namespace std;
#define int long long
const int N=60;
pair<char,int> a[N*2];
int f[N*2][N*2],f2[N*2][N*2],n;
void AC() {
	cout<<"      A         CCCCCCCCC     !!"<<endl;
	cout<<"     A A       C              !!"<<endl;
	cout<<"    A   A     C               !!"<<endl;
	cout<<"   AAAAAAA    C               !!"<<endl;
	cout<<"  A       A   C               !!"<<endl;
	cout<<" A         A   C                "<<endl;
	cout<<"A           A   CCCCCCCCC     !!"<<endl;
}
signed main() {
	cin>>n;
	for(int i=1; i<=n*2; i++) {
		f[i][i]=-100000,f2[i][i]=100000;
	}
	for(int i=1; i<=n; i++) {
		cin>>a[i].first>>a[i].second;
		a[i+n]=a[i];
		for(int j=1; j<=n; j++) f[i][i]=f[i+n][i+n]=f2[i][i]=f2[i+n][i+n]=a[i].second;
	}
	for(int len=2; len<=n; len++) {
		for(int i=1; i+len-1<=n*2; i++) {
			int j=i+len-1;
			for(int k=i; k<=j; k++) {
				if(a[k+1].first=='x') {
					f[i][j]=max(f[i][j],max(max(f[i][k]*f[k+1][j],f2[i][k]*f2[k+1][j]),max(f[i][k]*f2[k+1][j],f2[i][k]*f[k+1][j])));
					f2[i][j]=min(f2[i][j],min(min(f[i][k]*f[k+1][j],f2[i][k]*f2[k+1][j]),min(f[i][k]*f2[k+1][j],f2[i][k]*f[k+1][j])));
				} else {
					f[i][j]=max(f[i][j],f[i][k]+f[k+1][j]);
					f2[i][j]=min(f2[i][j],f2[i][k]+f2[k+1][j]);
				}
			}
		}
	}
	int res=-10000000000;
	for(int i=1; i<=n; i++) {
		res=max(res,f[i][i+n-1]);
	}
	cout<<res<<"\n";
	for(int i=1; i<=n; i++) {
		if(f[i][i+n-1]==res) cout<<i<<" ";
	}
	cout<<"\n";
	return 0;
}

回复

0 条回复,欢迎继续交流。

正在加载回复...