[Usaco]麥香牛塊

說實話,我也不知道這道題我到底對不對,反正各個網站的數據都過了,但是還是有些虛。

我們首先知道,對於a,b兩個數,設d=gcd(a,b),那麼對於任意c>=ab且d|c,一定存在正整數x,y,使得ax+by=c成立。

對於這道題,我們先考慮無限的情況,我目前就想到一種,這n個數的最大公因數爲d不爲1,那麼它們對於非d的倍數都無法構成。

再根據今年noipd1td1得(233),最大的應該不超過最大數的平方。至於證明。。。不知道,所以不確定呀。

這樣,最大隻到256*256,n最大爲10,那麼簡單dp就好了。

#include<bits/stdc++.h>
#define N 250000
using namespace std;
int n,mx,tmp;
int A[15];
bool f[N+500];
int gcd(int a,int b)
{
    return b==0?a:gcd(b,a%b);
}
int main()
{
    freopen("in.txt","r",stdin);
    cin>>n;f[0]=true;
    for(int i=1;i<=n;i++)cin>>A[i];
    tmp=A[1];for(int i=2;i<=n;i++)tmp=gcd(tmp,A[i]);
    if(tmp!=1)return cout<<0,0;
    for(int i=1;i<=n;i++)
        for(int j=0;j<=N;j++)
            if(f[j])f[j+A[i]]=true;
    for(int i=N;i>=0;i--)
        if(!f[i])return cout<<i,0;
    cout<<0;
    return 0;
} 
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章