mysql 實現(xiàn) 五個海盜分金幣

海盜分金問題:有五個海盜,劫掠了100兩金子,需要分 贓。辦法是抓鬮,盜亦有道。抓到第一個鬮的人,可以先提出一個分 配方案,如果他的方案被一半以上的人同意, 就照他的方案分金子,否則,第一個人就要 被殺掉。余下的人也照此辦理。我們的問題是:如果你是第一個人,你 會提出怎樣的分配方案?為了分析問題更確定,我們假定每個人 都是追求自己利益極大化的人。


with  a as
(
  select cast(help_topic_id as SIGNED) as n from mysql.help_topic   where  help_topic_id <101  order by help_topic_id desc
)
, max1  as
(
select  max(n) as max1 from a 
)
,max2 as 
(
  select
  p2.n as max2,p1.n as max1  from a p1,a p2
  where p1.n + p2.n = 100
  and p1.n >=(select max1 from max1)
)
,max3 as
(
  select/*+ JOIN_ORDER(P3,P2,P1) 
        JOIN_SUFFIX(P1) 
        NO_BNL() */
  p3.n as max3,p2.n as max2,p1.n as max1 from a p1,a p2,a p3,max2
  where p1.n+p2.n+p3.n = 100 
   and p3.n +p2.n <= 100
  and sign(p2.n- max2) + sign(p1.n - max1) >=0
limit 1
)
,max4 as
(
 select 
 /*+ JOIN_ORDER(p4,P3,P2,P1) 
        JOIN_SUFFIX(P1) 
        NO_BNL() */
 p4.n as max4,p3.n as max3,p2.n as max2,p1.n as max1       
 from a p1,a p2 ,a p3,a p4,max3
 where p1.n+p2.n+p3.n + p4.n = 100 
  and p4.n + p3.n +p2.n <= 100
 and sign(p3.n - max3) + sign(p2.n - max2) + sign(p1.n - max1) >0
 limit 1
)
,max5 as
(
 select 
 /*+ JOIN_ORDER(p5,p4,P3,P2,P1) 
        JOIN_SUFFIX(P1) 
        NO_BNL() */
 p5.n as max5,p4.n as max4,p3.n as max3,p2.n as max2,p1.n as max1       
 from a p1,a p2 ,a p3,a p4,a p5,max4
 where p1.n+p2.n+p3.n + p4.n  + p5.n = 100 
  and p5.n + p4.n + p3.n +p2.n <=100
 and sign(p4.n - max4) + sign(p3.n - max3) + sign(p2.n - max2) + sign(p1.n - max1) >=0
 limit 1
)
SELECT * FROM MAX5 

max5 max4 max3 max2 max1
97 0 1 0 2

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時請結(jié)合常識與多方信息審慎甄別。
平臺聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點,簡書系信息發(fā)布平臺,僅提供信息存儲服務(wù)。

相關(guān)閱讀更多精彩內(nèi)容

友情鏈接更多精彩內(nèi)容