社区讨论

想写一个20pts的暴力解但是0pts(

P11233[CSP-S 2024] 染色参与者 2已保存回复 3

讨论操作

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

当前回复
3 条
当前快照
1 份
快照标识符
@mhizruo6
此快照首次捕获于
2025/11/03 18:23
4 个月前
此快照最后确认于
2025/11/03 18:23
4 个月前
查看原帖
样例已过
CPP
#include <bits/stdc++.h>
#define int long long
using namespace std;

const int N = 2e5+10;
bool vis[N];
int a[N];
int n;
int ans = -0x3f3f3f3f;
int calc[N];
int rnum, rid;
int bnum, bid;

void dfs(int dep, int rnum, int bnum, int rid, int bid){
	if(dep == n){
		int sum = 0;
		for(int i = 1; i <= n; i++)
			sum += calc[i];
		ans = max(ans, sum);
		return ;
	}
		
	vis[dep+1] = 1;
	if(dep > 1){
		if(a[dep+1] == rnum && dep+1 != rid){
			calc[dep+1] = rnum;
		}
	}
	dfs(dep+1, a[dep+1], bnum, dep+1, bid);
	calc[dep+1] = 0;
	
	if(vis[1] == 1){
		vis[dep+1] = 0;
		if(dep > 1){
			if(a[dep+1] == bnum && dep+1 != bid){
				calc[dep+1] = bnum;
			}
		}
		dfs(dep+1, rnum, a[dep+1], rid, dep+1);
		calc[dep+1] = 0;
	}
}

signed main(){
	//freopen("1.in", "r", stdin);
	//freopen("1.out", "w", stdout);
	ios::sync_with_stdio(false);
	cin.tie(0);
	int T;
	cin >> T;
	while(T--){
		memset(calc, 0, sizeof calc);
		memset(a, 0, sizeof a);
		memset(vis, 0, sizeof vis);
		cin >> n;
		for(int i = 1; i <= n; i++)
			cin >> a[i];
		dfs(0, 0, 0, 0, 0);
		cout << ans << '\n';
		ans = 0;
	}
	return 0;
}
/*

*/

回复

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

正在加载回复...