社区讨论
暴力DFS+记忆化
P11233[CSP-S 2024] 染色参与者 1已保存回复 0
讨论操作
快速查看讨论及其快照的属性,并进行相关操作。
- 当前回复
- 0 条
- 当前快照
- 1 份
- 快照标识符
- @m2qj888w
- 此快照首次捕获于
- 2024/10/27 03:06 去年
- 此快照最后确认于
- 2024/10/27 09:08 去年
我想问问可以记忆化存当前位置的c[1~i]的和 每次dfs进行判断吗 小于直接return
考场上好像是这样写的 样例AC过了 但是现在重新写就WA了
数据
CPP2
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
代码
CPP#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;
}
把记忆化删了就对了
回复
共 0 条回复,欢迎继续交流。
正在加载回复...