社区讨论

38分,求调(萌新真心求大佬)

P3067[USACO12OPEN] Balanced Cow Subsets G参与者 3已保存回复 2

讨论操作

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

当前回复
2 条
当前快照
1 份
快照标识符
@lo7ws4dg
此快照首次捕获于
2023/10/27 09:02
2 年前
此快照最后确认于
2023/10/27 09:02
2 年前
查看原帖
我写完折半搜索后在输出答案时用了(ans-1)/2,请问是这个的问题吗?
代码如下:
CPP
#include<bits/stdc++.h>
using namespace std;
int n,a[20],k1,k2,p[59049],q[59049],last,ans;
void dfs(int now,int s,bool flag){
	if(now==last){
		if(flag) p[k1++]=s;
		else q[k2++]=s;
		return;
	}
	dfs(now+1,s,flag);
	dfs(now+1,s+a[now],flag);
	dfs(now+1,s-a[now],flag);
}
int main(){
	scanf("%d",&n);
	for(int i=0;i<n;i++) scanf("%d",&a[i]);   
	last=(n>>1);
	dfs(0,0,1);
	last=n;
	dfs(n>>1,0,0);
	sort(p,p+k1);
	sort(q,q+k2);
	for(int i=0;i<k1;i++) ans+=upper_bound(q,q+k2,p[i])-upper_bound(q,q+k2,p[i]-1);
	printf("%d",(ans-1)/2);
	return 0;
}

回复

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

正在加载回复...