改前后代码爆不同测试点求调
查看原帖
改前后代码爆不同测试点求调
1356156
Que123456_楼主2024/11/26 21:59

写了两代码,结果两次爆不同测试点,怎么调

#include<iostream>
#include<cstdio>
using namespace std;
const int mod=1e6;
int coin[256];
int main(){
//	freopen("P.in","r",stdin);
//	freopen("P.out","w",stdout);
	int n;cin>>n;int suma=0;
	for(int i=1;i<=n;i++){cin>>coin[i];suma+=coin[i];}
	int dp[300006]{1};bool Fdp[300006]{};
	int hig=suma/2;
	for(int j=1;j<=n;j++){
	for(int i=hig;i>0;i--){
		if(i<coin[j]){break;}
		else{dp[i]+=dp[i-coin[j]];Fdp[i]=1;}
		dp[i]%=mod;
	}
	}for(int i=hig;i>=0;i--){
		if(Fdp[i]){
			cout<<suma-2*i<<endl;
			cout<<dp[i]<<endl;return 0;
		}
	}cout<<"0\n"<<suma<<endl;
	return 0;
}

这个爆#11

#include<iostream>
#include<cstdio>
using namespace std;
const int mod=1e6;
int coin[256];
int main(){
//	freopen("P.in","r",stdin);
//	freopen("P.out","w",stdout);
	int n;cin>>n;int suma=0;
	for(int i=1;i<=n;i++){cin>>coin[i];suma+=coin[i];}
	int dp[300006]{1};bool Fdp[300006]{};
	int hig=suma/2;
	for(int j=1;j<=n;j++){
	for(int i=hig;i>0;i--){
		if(i<coin[j]){break;}
		else{dp[i]+=dp[i-coin[j]];Fdp[i]=1;}
		dp[i]%=mod;
	}
	}for(int i=hig;i>=0;i--){
		if(Fdp[i]){
			cout<<suma-2*i<<endl;
			cout<<dp[i]<<endl;return 0;
		}
	}cout<<"0\n"<<suma<<endl;
	return 0;
}

这个反而爆#6

2024/11/26 21:59
加载中...