暴力DFS+记忆化
查看原帖
暴力DFS+记忆化
1086872
ImSakura楼主2024/10/27 03:05

我想问问可以记忆化存当前位置的c[1~i]的和 每次dfs进行判断吗 小于直接return

考场上好像是这样写的 样例AC过了 但是现在重新写就WA了

数据

2
15
5 3 7 2 4 13 11 6 5 5 3 5 12 8 13
15
1 12 11 11 7 11 15 6 4 6 3 15 7 5 2

代码

#include <bits/stdc++.h>
using namespace std;
#define N 350005
#define Red 2
#define Blue 1

int a[N];
int record[N];
int n;
int ans = 0;
void dfs(int u, int blue, int red, int sum, int Color) {
	
	if (u > n) {
		
		ans = max(ans, sum);
		return;
	}

	

	if (record[u] == -1) {
		record[u] = sum;
	} else {
		if(record[u]>sum)return;
		else record[u]=sum;
	}

	
	
	if(Color==Blue){
		if(a[blue]==a[u])sum+=a[u];
		dfs(u+1,u,red,sum,Blue);
		dfs(u+1,u,red,sum,Red);
	}
	if(Color==Red){
		if(a[red]==a[u])sum+=a[u];
		dfs(u+1,blue,u,sum,Red);
		dfs(u+1,blue,u,sum,Blue);
	}
	
}

int main() {
	ios::sync_with_stdio(0);
	cin.tie();
	cout.tie();
	int T;
	cin >> T;
	while (T--) {
		ans=0;
		cin >> n;
		
		for (int i = 1; i <= n + 2; i++)record[i] = -1;
		for (int i = 1; i <= n; i++) {
			cin >> a[i];
		}
		
		dfs(1,0,0,0,Blue);
		dfs(1,0,0,0,Red);
		cout<<ans<<endl;
		
		
	}
	//freopen("detect3.in","r",stdin);
	//freopen("detect.out","w",stdout);
	
	
	
	return 0;
}

把记忆化删了就对了

2024/10/27 03:05
加载中...