全wa求助

B3624 猫粮规划

Dense7fog @ 2023-02-26 19:36:40

#include <iostream>
using namespace std;
int n, l, r, ans;
int w[50];
bool a[50];

void dfs(int step, int sum) {
    if (step > n) {
        if (sum >= l && sum <= r) {
            ans++;
            return ;
        }
    }
    if (sum > r)
        return;

    for (int i = step; i <= n; i++) {
        if (a[i] == 0) {
            a[i] = 1;
            sum += w[i];
            dfs(i + 1, sum);
            a[i] = 0;
            sum -= w[i];
        }
    }
}

int main() {
    cin >> n >> l >> r;
    for (int i = 1; i <= n; i++) {
        cin >> w[i];
    }
    dfs(1, 0);
    cout << ans;
    return 0;
}

by haogec123 @ 2023-03-02 23:38:01

void dfs(int step, int sum) {
    //if (step > n) {不一定搜完才有解,搜一半也有可能有解
        if (sum >= l && sum <= r) {
            ans++;
            //return ;这里不能返回,有可能还能找到其他的解 
        }
    //}

by haogec123 @ 2023-03-02 23:48:27

你的样例能过是因为样例的答案内每个都有第四份食物,你的程序只能计算出含有最后一份食物的解。(其实我觉得这题的样例很烂)


|