I-背包问题

一道搜索好题,求种数一般用dfs深搜,控制递归出口,分情况搜


#include<bits/stdc++.h>
using namespace std;
typedef long long LL;
LL v[50],ans,n,m;
void dfs(int x,LL sum)
{
    if(x==n)
    {
        ans++;
        return;
    }
    dfs(x+1,sum);//不要物品x
    if(sum+v[x]<=m)
        dfs(x+1,sum+v[x]);
}
int main()
{
    while(scanf("%d%d",&n,&m)==2)
    {
        for(int i=0;i<n;i++)
            scanf("%d",&v[i]);
        ans=0;
        dfs(0,0);
        printf("%lld\n",ans);
    }
    return 0;
}

猜你喜欢

转载自blog.csdn.net/qq_41061455/article/details/80482777