求救!!!
  • 板块灌水区
  • 楼主OI_StarGod
  • 当前回复0
  • 已保存回复0
  • 发布时间2024/7/15 20:52
  • 上次更新2024/7/15 21:59:31
查看原帖
求救!!!
739534
OI_StarGod楼主2024/7/15 20:52

p4342 #2和#3都WA了

#include <bits/stdc++.h>
using namespace std;
#define int long long
const int N = 355;
int n;
char c[N];
int a[N], dp[N][N][2];
int ans = -0x3f3f3f3f;
signed main() {
	cin >> n;
	for (int i = 1; i <= n; ++i) {
		for (int j = 1; j <= n; ++j) {
			dp[i][j][0] = 0x3f3f3f3f;
			dp[i][j][1] = -0x3f3f3f3f;
		}
	}
	for (int i = 1; i <= n; ++i) {
		cin >> c[i] >> a[i];
		c[i + n] = c[i];
		a[i + n] = a[i];
	}
	for (int i = 1; i <= 2 * n; ++i) {
		dp[i][i][0] = a[i];
		dp[i][i][1] = a[i];
	}
	for (int l = 2; l <= n; ++l) {
		for (int i = 1, j = l; j <= 2 * n; ++i, ++j) {
			for (int k = i; k < j; ++k) {
				for (int x = 0; x <= 1; ++x) {
					for (int y = 0; y <= 1; ++y) {
						if (c[k + 1] == 'x') {
							dp[i][j][0] = min(dp[i][j][0], dp[i][k][x] * dp[k + 1][j][y]);
							dp[i][j][1] = max(dp[i][j][1], dp[i][k][x] * dp[k + 1][j][y]);
						}else if (c[k + 1] == 't'){
							dp[i][j][0] = min(dp[i][j][0], dp[i][k][x] + dp[k + 1][j][y]);
							dp[i][j][1] = max(dp[i][j][1], dp[i][k][x] + dp[k + 1][j][y]);
						}
					}
				}
			}
		}
	}
	for (int i = 1; i <= n; ++i) {
		ans = max(ans, dp[i][i + n - 1][1]);
	}
	cout << ans << endl;
	for (int i = 1; i <= n; ++i) {
		if (dp[i][i + n - 1][1] == ans) {
			cout << i << ' ';
		}
	}
	return 0;
}
2024/7/15 20:52
加载中...