社区讨论
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 条回复,欢迎继续交流。
正在加载回复...