WA求助

B3624 猫粮规划

洛小璃 @ 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]);
} 

|