您的位置:首页 > 其它

usaco --nuggets

2012-11-29 20:04 204 查看
看了nocow的上的几个结论,然后构造出可以构造的数字,进行判断的

ifstream fin("nuggets.in");

ofstream fout("nuggets.out");

int n;

int a[300];

const int maxn=256*256;

bool ic[maxn];

void init()

{

fin>>n;

for(int i=0;i<n;i++)

fin>>a[i];

}

int gcd(int x,int y)

{

if(x>y)swap(x,y);

if(x==0)return y;

return gcd(y%x,x);

}

void slove()

{

memset(ic,0,sizeof(ic));

ic[0]=1;

int g=a[0];

for(int i=1;i<n;i++)

g=gcd(g,a[i]);

if(g!=1)

{

zout<<0<<endl;

return ;

}

ic[0]=1;

for(int i=1;i<=maxn;i++)

{

for(int j=0;j<n;j++)

if(i>=a[j])ic[i]=ic[i]||ic[i-a[j]];

}

int ans=0;

for(int i=maxn;i>0;i--)

{

if(ic[i]==0)

{

zout<<i<<endl;

return;

}

}

zout<<0<<endl;

}

int main()

{

init();

slove();

return 0;

}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: