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