返回题解分享
讨论 / 题解分享/ 帖子详情

砝码称重(编程题) - 题解

像方案数,种类数啥的一般都是dp,转移方程想不出,那就用暴搜,刚才自己用暴搜做,结果全错了,原因是在出口处的处理上,实际对于每次搜索,用一个bool数组去记录重量状态即可,最后遍历所有数,标记过的计数
`

#include<bits/stdc++.h>
using namespace std;
int n,a[105],ans;
bool st[100005];
void dfs(int x,int y,int u)
{
	if(u==n+1)return;
	st[abs(x-y)]=1;
	dfs(x+a[u],y,u+1);
	dfs(x,y+a[u],u+1);
	dfs(x,y,u+1);
}
int main()
{
	cin>>n;//天平有两边
	for(int i=0;i<n;i++)cin>>a[i];
	//单独一边 共Cni[1,n]求和
	//分别两边 
	dfs(0,0,0);
	for(int i=1;i<=100005;i++)
	if(st[i])ans++;
	
	cout<<ans;
	return 0;
}
`
0 回复 0 转发 2 喜欢 0 阅读
回复 (0)
默认 最新
暂无回复,快来抢沙发!