体积

题目:有n件物品,每一件都有一个重量Vi,求取出若干件物品能组成多少个重量和。

数据范围:1<=n<=20 i<=Vi<=50

题解:这是一道很简单的深搜题,每种物品只有取或不取两种情况,挨个深搜,并用一个hash数组记录出现的和就行了。

完整代码如下

#include<cstdio>
#include<iostream>
#include<algorithm>
#include<cmath>
#include<cstring>
using namespace std;
const int NR=20;//定义常量
int v[NR+1];//记录重量
bool hash[NR*51];//hash记录出现的重量和
int n;

void dfs(int dep,int sum)
{
	if(dep>n)//如果枚举过每一个物品,hash记录
	{
		hash[sum]=true;
		return;
	}
	dfs(dep+1,sum+v[dep]);//取这件物品
	dfs(dep+1,sum);//不取这件物品
}
int main()
{
	cin>>n;
	for(int i=1;i<=n;i++)
	{
		scanf("%d",&v[i]);
	}
	dfs(1,0);
	int ans=0;//定义ans并初始化为0,
	for(int i=1;i<=1000;i++)
	{
		if(hash[i]) ans++;//如果这个重量和出现过,ans++
	}
	cout<<ans<<endl;//输出
	return 0;
}

  然后就对了

猜你喜欢

转载自www.cnblogs.com/chen-1/p/9459536.html