Mirror_of_the_Sky @ 2024-05-30 13:39:18
rt。本蒟蒻第一份代码全WA,第二份代码就AC了,有哪位大佬能帮我看一下吗?
#include <bits/stdc++.h>
using namespace std;
int a[44],ans;
int f[44][330];
int main() {
int n,l,r;
cin>>n>>l>>r;
for(int i=1; i<=n; i++) {
cin>>a[i];
}
for(int i=1; i<=n; i++) {
for(int j=1; j<=r; j++) {
if(j<a[i]){
f[i][j]=f[i-1][j];
}
if(j==a[i]) {
f[i][j]=f[i-1][j]+1;
} else {
f[i][j]=f[i-1][j]+f[i-1][j-a[i]];
}
}
}
for(int j=l; j<=r; j++) {
ans+=f[n][j];
}
cout<<ans;
return 0;
}
#include <bits/stdc++.h>
using namespace std;
int a[44],ans;
int f[44][330];
int main() {
int n,l,r;
cin>>n>>l>>r;
for(int i=1; i<=n; i++) {
cin>>a[i];
}
for(int i=1; i<=n; i++) {
for(int j=1; j<=r; j++) {
if(j<a[i]) {
f[i][j]=f[i-1][j];
}
else if(j>a[i]){//here
f[i][j]=f[i-1][j]+f[i-1][j-a[i]];
}
else{
f[i][j]=f[i-1][j]+1;
}
}
}
for(int j=l; j<=r; j++) {
ans+=f[n][j];
}
cout<<ans;
return 0;
}
by NitsugaoO @ 2024-05-30 13:45:42
第一段代码:
if(j<a[i]){
f[i][j]=f[i-1][j];
}
/* else */ if(j==a[i]) { // 所以这里要加 else
f[i][j]=f[i-1][j]+1;
} else { // 这里是不等于 也就是包含了 j<a[i] 的情况 那原本大于执行的语句在小于的时候也跑了 相当于小于的情况被大于覆盖了.
f[i][j]=f[i-1][j]+f[i-1][j-a[i]];
}