傳送門
題意:乙個集合s的優美值定義為:最大的x,滿足對於任意i∈[1,x],都存在乙個s的子集s',使得s'中元素之和為i。
給定n個集合,對於每一次詢問,指定乙個集合s1和乙個集合s2,以及乙個數k,要求選擇乙個s2的子集s3(|s3|<=k),使得s1∪s3的優美值最大。(集合元素可以重複)
$n,m \le 1000, q \le 1000$
比賽時看了一眼題沒認真想其實不難....現在想出來(也晚了)
考慮如何求最優值
如果現在最優值為$now$,只要找到下乙個未用的$\le now+1$的最小元素$x$,最優值就可以變成$now+x$
如果找不到怎麼辦?去$s2$裡找$\le now+1$的未用的最大元素
實現上可以用乙個並查集記錄某乙個元素的上乙個(包括自己)未用元素是誰做到$\alpha(m)$
#include #include#include
#include
#include
using
namespace
std;
typedef
long
long
ll;const
int n=1005
;inline
intread()
while(c>='
0'&&c<='9')
return x*f;
}int
n,a,b,k;
struct
set
void sort()
}s[n];
intfa[n];
inline
int find(int x)
void solve(set &a,set &b,int
k) }
else
break
; }
printf(
"%d\n
",now);
}int
main()
int q=read();
while(q--)
}
最優集合 51Nod 1821
假設已選元素之和是sum 下乙個待選的數是val 只有當val sum 1時 才滿足選擇當前元素之後 1,sum val 內任意數都可以被已選元素表示 如果val sum 1 則 sum 1,val 1 都無法用已選元素表示 鬼谷子錢袋問題為什麼可以用二進位制 就是因為二進位制是滿足上述條件的所有方...
51NOD 1821 最優集合 棧
1821 最優集合 乙個集合s的優美值定義為 最大的x,滿足對於任意i 1,x 都存在乙個s的子集s 使得s 中元素之和為i。給定n個集合,對於每一次詢問,指定乙個集合s1和乙個集合s2,以及乙個數k,要求選擇乙個s2的子集s3 s3 k 使得s1 s3的優美值最大。集合元素可以重複 input 第...
51nod 最小集合
最小集合 system message 命題人 基準時間限制 1 秒 空間限制 131072 kb 分值 80 a君有乙個集合。這個集合有個神奇的性質。若x,y屬於該集合,那麼x與y的最大公因數也屬於該集合。但是他忘了這個集合中原先有哪些數字。不過幸運的是,他記起了其中n個數字。當然,或許會因為過度...