题目链接:小A点菜
题目思路:从第一道菜开始往后搜索,如果当前菜的价格大于携带的钱,回溯一步后接着搜索
#include<iostream>
#include<cstdio>
using namespace std;
int a[120];
int n,m,tot;
void dfs(int k,int x)
{
if(k>m)
return ;
if(k == m)
{
tot ++;
return ;
}
for(int i=x+1;i<=n;i++)
{
dfs(k+a[i],i);
}
}
int main()
{
scanf("%d%d",&n,&m);
for(int i=1;i<=n;i++)
scanf("%d",&a[i]);
dfs(0,0);
cout<<tot<<endl;
return 0;
}
emmmm
这题还是一道01背包问题。。。
???

本文通过一道具体的01背包问题实例介绍了如何使用递归深度优先搜索的方法来解决该类问题。通过对菜品价格和预算的匹配,实现了所有可能组合的枚举,并统计了可行方案的数量。
457

被折叠的 条评论
为什么被折叠?



