写了两代码,结果两次爆不同测试点,怎么调
#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