不正确暴力求调
查看原帖
不正确暴力求调
925491
pengze36楼主2024/10/21 15:46

拜谢dalao

#include<iostream>
#include<cstdio>
#include<cmath>
#include<algorithm>
#include<cstring>
#define LLL __int128
#define ll long long 
#define __int128 ll
#define re register 
using namespace std;
int n;
int a[2005];
bool f[8000005];
int maxx,maxi;
bool no0=0;
bool ff=1,fz=1;
int main(){
    scanf("%d",&n);
    for(int i=1;i<=n;++i){
    	scanf("%d",&a[i]);
    	if(a[i]<0) fz=0;
    	if(a[i]>0) ff=0;
    	if(a[i]==0) no0=1;
    	if(a[i]>maxx){
    		maxx=a[i];
    		maxi=i;
		}
	}
	if(ff||fz){
			int maxx=-0x3f3f3f3f;
			for(int i=1;i<=n;++i){
				maxx=max(maxx,a[i]);
			}
			
			printf("%d\n",maxx);
			return 0;
	}
	f[4000000]=1;
    for(int i=1;i<=n;++i){
    	if(i==maxi) continue;
    	if(a[i]>0){
    		for(int j=8000000;j>=a[i];--j){
    			f[j]|=f[j-a[i]];
			}
		}
		if(a[i]<0){
			for(int j=0;j<=8000000-abs(a[i]);++j){
				f[j]|=f[j-a[i]];
			}
		}
	}
/*	for(int j=8000000;j>=0;--j){
		if(f[j]){
			cout<<j-4000000<<endl;
		//	printf("%d\n",maxx+j-4000000);
		///	return 0;
		}
	}*/
	for(int j=4000000-1;j>=0;--j){//!=4000000
	//	if(j==4000000&&(!no0)) continue;
		if(f[j]){
		//	cout<<j-4000000<<endl;
			printf("%d\n",maxx+j-4000000);
			return 0;
		}
	}
	return 0;
}
2024/10/21 15:46
加载中...