__Function__ @ 2024-11-04 13:04:16
#include <bits/stdc++.h>
#define int long long
using namespace std;
int n, l, r;
int a[41];
int ans;
void dfs(int sum, int x) {
if(x > n + 1) {
return;
}
if(sum <= r && sum >= l) {
ans++;
if(x == n + 1)
return;
}
dfs(sum + a[x], x + 1);//选
dfs(sum, x + 1);//不选
}
signed main() {
ios::sync_with_stdio(0);
cin.tie(0), cout.tie(0);
cin >> n >> l >> r;
for (int i = 1; i <= n; i ++) {
cin >> a[i];
}
dfs(0, 1);
cout << ans;
return 0;
}
玄关QAQ(调一下暴力)
by Fcersoka @ 2024-11-04 13:50:18
@Function 改好了
#include <bits/stdc++.h>
#define int long long
using namespace std;
int n, l, r;
int a[41];
int ans;
void dfs(int sum, int x) {
if(sum > r) {
return;
}
if(x == n + 1) {
if (sum >= l)
ans++;
return ;
}
dfs(sum + a[x], x + 1);//选
dfs(sum, x + 1);//不选
}
signed main() {
ios::sync_with_stdio(0);
cin.tie(0), cout.tie(0);
cin >> n >> l >> r;
for (int i = 1; i <= n; i ++) {
cin >> a[i];
}
dfs(0, 1);
cout << ans;
return 0;
}
你需要当每个数的选或不选的选择都完毕后,再进行统计答案,否则会多算。而且需要一个减枝:当
by HEPwP @ 2024-11-04 13:51:04
@Function 晚了10s qwq
#include <bits/stdc++.h>
#define int long long
using namespace std;
int n, l, r;
int a[41];
int ans;
void dfs(int sum, int x) {
if(x >= n + 1) {
if(sum <= r && sum >= l)
ans++;
return;
}
dfs(sum + a[x], x + 1);//选
dfs(sum, x + 1);//不选
}
signed main() {
ios::sync_with_stdio(0);
cin.tie(0), cout.tie(0);
cin >> n >> l >> r;
for (int i = 1; i <= n; i ++) {
cin >> a[i];
}
dfs(0, 1);
cout << ans;
return 0;
}
by __Function__ @ 2024-11-04 13:51:12
@Fcersoka 一关thx
by HEPwP @ 2024-11-04 13:52:30
我这个没加剪枝,是50pts的
by __Function__ @ 2024-11-04 13:56:38
@HEPwP thx