最優集合 51Nod 1821

2021-09-01 08:46:08 字數 791 閱讀 1113

假設已選元素之和是sum 下乙個待選的數是val 只有當val<=sum+1時 才滿足選擇當前元素之後[1,sum+val]內任意數都可以被已選元素表示 如果val>sum+1 則[sum+1,val-1]都無法用已選元素表示

鬼谷子錢袋問題為什麼可以用二進位制 就是因為二進位制是滿足上述條件的所有方法中最優的

具體實現就是掃集合a 當a[i]<=sum+1時就加上接著走 不然就在b集合裡找[1,sum+1]內最大的未被選的數 並查集維護一下即可

#include using namespace std;

typedef long long ll;

const int maxn=1e3+10;

ll val[maxn][maxn];

int len[maxn],f[maxn];

int n,q;

int getf(int p)

void unite(int u,int v)

template inline void _cin(t &ret)

}int main()

sort(val[i]+1,val[i]+len[i]+1);

}//scanf("%d",&q);

_cin(q);

while(q--)

}if(i==len[a]+1)

}printf("%lld\n",sum);

}return 0;}/*

26 1 3 4 4 7 8

5 1 2 3 4 5

101 2 3

*/

51NOD 1821 最優集合 棧

1821 最優集合 乙個集合s的優美值定義為 最大的x,滿足對於任意i 1,x 都存在乙個s的子集s 使得s 中元素之和為i。給定n個集合,對於每一次詢問,指定乙個集合s1和乙個集合s2,以及乙個數k,要求選擇乙個s2的子集s3 s3 k 使得s1 s3的優美值最大。集合元素可以重複 input 第...

51NOD 1821 最優集合 並查集

傳送門 題意 乙個集合s的優美值定義為 最大的x,滿足對於任意i 1,x 都存在乙個s的子集s 使得s 中元素之和為i。給定n個集合,對於每一次詢問,指定乙個集合s1和乙個集合s2,以及乙個數k,要求選擇乙個s2的子集s3 s3 k 使得s1 s3的優美值最大。集合元素可以重複 n,m le 100...

51nod 最小集合

最小集合 system message 命題人 基準時間限制 1 秒 空間限制 131072 kb 分值 80 a君有乙個集合。這個集合有個神奇的性質。若x,y屬於該集合,那麼x與y的最大公因數也屬於該集合。但是他忘了這個集合中原先有哪些數字。不過幸運的是,他記起了其中n個數字。當然,或許會因為過度...