一个简单的深度优先搜索题(站外的)
  • 板块灌水区
  • 楼主Mark_666
  • 当前回复3
  • 已保存回复3
  • 发布时间2023/3/5 19:28
  • 上次更新2023/10/23 22:55:55
查看原帖
一个简单的深度优先搜索题(站外的)
632830
Mark_666楼主2023/3/5 19:28
#include<bits/stdc++.h>
using namespace std;
int a[100000];
bool b[1000];
int v[1000];
int n;
int ans;
void dfs (int dep,int sum)
{
    if(dep>n)
    {
        a[sum]++;
        return;
    }
    dfs(dep+1,sum);
    dfs(dep+1,sum+=v[dep]);
    sum-=v[dep];
}
int main()
{
    cin>>n;
    for(int i=1;i<=n;i++)
    {
        cin>>v[i];
    }
    dfs(v[1],0);
    for(int i=0;i<100000;i++)
    {
        if(a[i]>=1)
            ans++;
    }
    cout<<ans-1<<endl;
    return 0;
}

题目描述 给出n件物品,每件物品有一个体积Vi,求从中取出若干件物品能够组成的不同的体积和有多少种可能。例如, n = 3, Vi = (1, 3, 4),那么输出6种,6种不同体积和具体为1、3、4、5、7、8。

输入 第1行1个正整数,表示n。

第2行n个正整数,表示Vi,每两个数之间用一个空格隔开。

输出

一行一个数,表示不同的体积和有多少种可能。

样例输入 3 1 3 4

样例输出 6

对于30%的数据满足:n<=5, Vi<=10。   对于60%的数据满足:n<=10, Vi<=20。   对于100%的数据满足:n<=20, 1<=Vi<=50。 帮我看看,谢谢

2023/3/5 19:28
加载中...