请求加强数据
查看原帖
请求加强数据
109931
WJX3078楼主2020/10/27 11:48

如题,我有两份代码都达到了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~~(像我一样)~~

2020/10/27 11:48
加载中...