#20599: NA


ohmygod0193 (2.7182818284590450907955982984...)

學校 : 國立臺灣師範大學附屬高級中學
編號 : 75658
來源 : [223.137.198.149]
最後登入時間 :
2024-01-28 12:04:13
b527. 板條編年史 (一):紅圓茵可與大魔導 nanj 的出現 -- 104學年度板橋高中校內資訊學科能力競賽(三) | From: [114.136.142.18] | 發表日期 : 2020-02-11 20:16

請問一下4,5測資是甚麼

我不考慮超過10007的話 4,5 AC ;7,9 NA

若有考慮4,5NA ;7,9 AC;

code

#include<bits/stdc++.h>
using namespace std;
int main()
{
int n,sum=0;
cin>>n;
int x[n];vector<int> v;
for(int i=0;i<n;i++) cin>>x[i],sum+=(x[i]);
if(sum<=10007 and sum%2==1)
{
cout<<"NO"<<endl;
}
else if(sum>10007)
{
sum/=2;
bool ans=false;
int dp[sum+1];
for(int i=0;i<=sum;i++) dp[i]=0;
for(int i=0;i<n;i++)
{
if(ans) break;
for(int j=sum;j>=0;j--)
{
if(j-x[i]<0) break;
dp[j]=max(dp[j],dp[j-x[i]]+x[i]);
if(find(v.begin(),v.end(),dp[j]%10007)!=v.end())
{
ans=true;break;
}
else v.push_back(dp[j]%10007);
}

}
if(dp[sum]==sum or ans) cout<<"YES"<<endl;
else cout<<"NO"<<endl;
}
else
{
sum/=2;
int dp[sum+1];
for(int i=0;i<=sum;i++) dp[i]=0;
for(int i=0;i<n;i++)
{
for(int j=sum;j>=0;j--)
{
if(j-x[i]<0) break;
dp[j]=max(dp[j],dp[j-x[i]]+x[i]);
}
}

if(dp[sum]==sum) cout<<"YES"<<endl;
else cout<<"NO"<<endl;
}

}

 
ZeroJudge Forum