体积
题目:有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; }
然后就对了