洛小璃 @ 2023-09-26 17:48:56
求大佬帮忙看看哪里有问题
#include <iostream>
using namespace std;
int n,l,r;
int w[100];
int ExtremeMet;
void dfs(int Pos,int Max,bool flag) {
if(flag==true) Max+=w[Pos];
if(Max>=l&&Max<=r) {
ExtremeMet++;
}
if(Pos!=n&&Max<r) {
dfs(Pos+1,Max,true);
dfs(Pos+1,Max,false);
}
}
int main() {
cin>>n>>l>>r;
for(int i=1;i<=n;i++) {
cin>>w[i];
}
dfs(0,0,0);
cout<<ExtremeMet;
return 0;
}
by Danny_chan @ 2024-02-18 18:02:42
@洛小璃 其实不用flag
正解:
void dfs(int x,int sum){//x是枚举了多少个 ,sum是吃了多少食物
if(sum>r) return ;//剪枝要加上
if(x>n){//只要枚举的个数>n开始计算可不可以
if(sum>=l&&sum<=r){//看看是否可以
ans++;
}
return ;
}
//吃
dfs(x+1,sum);
//不吃
dfs(x+1,sum+a[x]);
}