欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页

体积

程序员文章站 2022-03-03 11:19:54
...

题目:有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;
}

  然后就对了