RQNOJ646 一道搜尋神題

2022-06-01 11:27:13 字數 1073 閱讀 6444

rqnoj646

現在有n個元素,每個元素具有3個屬性ai, bi, ci,現在青青要求把全部元素分為3個集合,稱為集合x、集合y和集合z,使表示式

的值最小。

可以讓某個集合為空。

1 ≤ n ≤ 100, 000,1 ≤ ai, bi, ci ≤ 100, 000, 000

怎麼說呢?

這題是我至今見到過的最神奇的一題。神奇到嘆為觀止。

經嘗試,貪心是不行的,易找出反例。

經嘗試,高深的演算法和資料結構是很難想出來和寫出來的。

經了解,本題可以用搜尋做。且必須是裸搜,即o(3^n)的。

經嘗試,若加個排序的預處理,寫o(nlogn+2^n)是過不了的。

對於o(3^(10^5))在1s內跑出,我實在無話可講。

這就是:只有想不到,沒有做不到。

var

a,b,c:array[1..1000000] of longint;

n,i,j,k,l,p,min:longint;

procedure search(i,s1,s2,s3:longint);

begin

if s1+s2+s3>=min then exit;

if i<=n then

if (a[i]<=s1)or(b[i]<=s2)or(c[i]<=s3) then search(i+1,s1,s2,s3)

else

begin

if a[i]>s1 then search(i+1,a[i],s2,s3);

if b[i]>s2 then search(i+1,s1,b[i],s3);

if c[i]>s3 then search(i+1,s1,s2,c[i]);

endelse min:=s1+s2+s3;

end;

begin

readln(n);

for i:=1 to n do readln(a[i],b[i],c[i]);

min:=100000000;

search(1,0,0,0);

writeln(min);

end.

一道搜尋好題

這個題真的叫這個名字 一道搜尋好題 我也很絕望 但是這並不是好題推薦 題目描述 給定乙個數s,找任意個正整數a1,a2,an,使得它們的和恰好等於s,且它們的倒數之和與1的差不超過10 6。輸出任意一種方案或者輸出無解。s 65536 輸入樣例 10輸出樣例 2 4 4 看起來非常的不靠譜對不對 實...

一道搜尋好題

給定乙個數s,找任意個正整數a1,a2,an,使得它們的和恰好等於s,且它們的倒數之和與1的差不超過10 6。輸出任意一種方案或者輸出無解。s 65536 解析 事實上也是簡單的搜尋。從小到大列舉每個數,加入試試看。兩個剪枝 當前的和加上最大的和到不了1,退出。當前的和加上最小的和都超過了1,退出。...

一道演算法題

兩個燒杯,乙個放糖乙個放鹽,用勺子舀一勺糖到鹽,攪拌均勻,然後舀一勺混合 物會放糖的燒杯,問你兩個燒杯哪個雜質多?一樣多吧 對的 為啥?是不是因為 糖和鹽本來就是均勻的 因為,就算不攪拌均,你放一勺過去,那邊放一勺不含雜質的過來,那麼都是一勺雜之 如果攪拌均勻的話也是一樣 小依 21 45 32 也...