zoukankan      html  css  js  c++  java
  • [RQNOJ646]一道搜索神题

    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]);
    		        end
            else 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.
    
  • 相关阅读:
    认识“委托”
    程序员的修炼之道:从小工到专家(一)
    知识的使用 与 知识的内化
    VB.Net中 Module 的前世今生
    memcached
    C#知识
    Android之垂直显示TextView
    Android开发之各个语言
    Android之hint提示字体大小修改,显示完全
    Android 之计算控件颜色透明度
  • 原文地址:https://www.cnblogs.com/oldmanren/p/2220691.html
Copyright © 2011-2022 走看看