如题,我有两份代码都达到了AC,但其中一份明显有问题
1.问题代码
#include <iostream>
#include <cstdio>
#include <cctype>
#define il inline
#define ll long long
#define int long long
#define R register
#define gc getchar
using namespace std;
//-----------------------初始程序---------------------------
il int read(){
int x=0;bool f=0;char ch=gc();
while(!isdigit(ch)) {f|=ch=='-';ch=gc();}
while(isdigit(ch)) {x=(x<<1)+(x<<3)+(ch^48);ch=gc();}
return f?-x:x;
}
il int max(int a,int b){
return a>b?a:b;
}
il int min(int a,int b){
return a<b?a:b;
}
il void swap(int &A,int &B){
A^=B^=A^=B;
}
//-----------------------初始程序---------------------------
const int MAXN=55,MAXM=1e3+10;
int n,beg,maxx,ans=-1;
int a[MAXN];
bool f[MAXN][MAXM];
signed main()
{
n=read(),beg=read(),maxx=read();
for(R int i=1;i<=n;++i) a[i]=read();
f[0][beg]=1;
for(R int i=1;i<=n;++i)
for(R int j=maxx;j;--j) {
if(j-a[i]>=0) f[i][j]|=f[i-1][j-a[i]];
if(j+a[i]<=maxx) f[i][j]|=f[i-1][j+a[i]];
}
for(R int i=maxx;i;--i) if(f[n][i]){
ans=i;break;
}
printf("%lld",ans);
return 0;
}
2.正确代码
#include <iostream>
#include <cstdio>
#include <cctype>
#define il inline
#define ll long long
#define int long long
#define R register
#define gc getchar
using namespace std;
//-----------------------初始程序---------------------------
il int read(){
int x=0;bool f=0;char ch=gc();
while(!isdigit(ch)) {f|=ch=='-';ch=gc();}
while(isdigit(ch)) {x=(x<<1)+(x<<3)+(ch^48);ch=gc();}
return f?-x:x;
}
il int max(int a,int b){
return a>b?a:b;
}
il int min(int a,int b){
return a<b?a:b;
}
il void swap(int &A,int &B){
A^=B^=A^=B;
}
//-----------------------初始程序---------------------------
const int MAXN=55,MAXM=1e3+10;
int n,beg,maxx,ans=-1;
int a[MAXN];
bool f[MAXN][MAXM];
signed main()
{
n=read(),beg=read(),maxx=read();
for(R int i=1;i<=n;++i) a[i]=read();
f[0][beg]=1;
for(R int i=1;i<=n;++i)
for(R int j=maxx;~j;--j) { //注意这一行,j可以等于0!!!
if(j-a[i]>=0) f[i][j]|=f[i-1][j-a[i]];
if(j+a[i]<=maxx) f[i][j]|=f[i-1][j+a[i]];
}
for(R int i=maxx;i;--i) if(f[n][i]){
ans=i;break;
}
printf("%lld",ans);
return 0;
}
由此可见,数据中并没有音量降为0的情况,建议加一组音量降为0的情况的数据,防止一些刚学背包的OIer没考虑完整却AC~~(像我一样)~~