楼主: 〇〇

[精华] Puzzleup 2010 比赛快开始了,大家用SQL解答啊

[复制链接]
论坛徽章:
1
ITPUB9周年纪念徽章
日期:2010-10-08 09:28:51
271#
发表于 2010-10-21 11:51 | 只看该作者
原帖由 lastwinner 于 2010-10-21 11:14 发表


253# 已经证明了,但是我没证明出这就是最大的……


用数学归纳法可以证明你那方法得到的是最大的^^

使用道具 举报

回复
论坛徽章:
484
ITPUB北京香山2007年会纪念徽章
日期:2007-01-24 14:35:02ITPUB北京九华山庄2008年会纪念徽章
日期:2008-01-21 16:50:24ITPUB北京2009年会纪念徽章
日期:2009-02-09 11:42:452010新春纪念徽章
日期:2010-03-01 11:04:552010数据库技术大会纪念徽章
日期:2010-05-13 10:04:272010系统架构师大会纪念
日期:2010-09-04 13:35:54ITPUB9周年纪念徽章
日期:2010-10-08 09:28:512011新春纪念徽章
日期:2011-02-18 11:43:32ITPUB十周年纪念徽章
日期:2011-11-01 16:19:412012新春纪念徽章
日期:2012-01-04 11:49:54
272#
发表于 2010-10-21 12:34 | 只看该作者
原帖由 nlrte13 于 10-10-21 11:51 发表


用数学归纳法可以证明你那方法得到的是最大的^^



愿闻其详

使用道具 举报

回复
论坛徽章:
520
奥运会纪念徽章:垒球
日期:2008-09-15 01:28:12生肖徽章2007版:鸡
日期:2008-11-17 23:40:58生肖徽章2007版:马
日期:2008-11-18 05:09:48数据库板块每日发贴之星
日期:2008-11-29 01:01:02数据库板块每日发贴之星
日期:2008-12-05 01:01:03生肖徽章2007版:虎
日期:2008-12-10 07:47:462009新春纪念徽章
日期:2009-01-04 14:52:28数据库板块每日发贴之星
日期:2009-02-08 01:01:03生肖徽章2007版:蛇
日期:2009-03-09 22:18:532009日食纪念
日期:2009-07-22 09:30:00
273#
发表于 2010-10-21 21:30 | 只看该作者
原帖由 nlrte13 于 2010-10-21 10:57 发表
这个题,要用程序暴力,有很简单的思路,不用考虑数字大小,
想象是20个球,两个一组
{ A-A, B-B,  C-C, D-D …… }
要把它们按排成队,一个一个按顺序放,放了一组中的一个就要优先考虑另一个,
同时要满足条件不能有相同间隔数。
这样排好队以后,再把最前的替换成9,次前的替换成8,就是答案了。

要是按ABC顺序放置,那么把 A-9,B-8,C-7,就是答案。

我的方法和你类似,即不用考虑数字的排列,肯定是大数先出现。剩下的就是间隙的排列,数量还是十分巨大。我从左到右一个一个放,如果能有一种方法能预见到凑不足20位,就可以提早放弃。

使用道具 举报

回复
论坛徽章:
484
ITPUB北京香山2007年会纪念徽章
日期:2007-01-24 14:35:02ITPUB北京九华山庄2008年会纪念徽章
日期:2008-01-21 16:50:24ITPUB北京2009年会纪念徽章
日期:2009-02-09 11:42:452010新春纪念徽章
日期:2010-03-01 11:04:552010数据库技术大会纪念徽章
日期:2010-05-13 10:04:272010系统架构师大会纪念
日期:2010-09-04 13:35:54ITPUB9周年纪念徽章
日期:2010-10-08 09:28:512011新春纪念徽章
日期:2011-02-18 11:43:32ITPUB十周年纪念徽章
日期:2011-11-01 16:19:412012新春纪念徽章
日期:2012-01-04 11:49:54
274#
发表于 2010-10-21 23:43 | 只看该作者
原帖由 newkid 于 10-10-21 21:30 发表

我的方法和你类似,即不用考虑数字的排列,肯定是大数先出现。剩下的就是间隙的排列,数量还是十分巨大。我从左到右一个一个放,如果能有一种方法能预见到凑不足20位,就可以提早放弃。



大家的思路看来都差不多,最后就在怎么排列了
我之前的两个推论也是为此服务的

使用道具 举报

回复
论坛徽章:
520
奥运会纪念徽章:垒球
日期:2008-09-15 01:28:12生肖徽章2007版:鸡
日期:2008-11-17 23:40:58生肖徽章2007版:马
日期:2008-11-18 05:09:48数据库板块每日发贴之星
日期:2008-11-29 01:01:02数据库板块每日发贴之星
日期:2008-12-05 01:01:03生肖徽章2007版:虎
日期:2008-12-10 07:47:462009新春纪念徽章
日期:2009-01-04 14:52:28数据库板块每日发贴之星
日期:2009-02-08 01:01:03生肖徽章2007版:蛇
日期:2009-03-09 22:18:532009日食纪念
日期:2009-07-22 09:30:00
275#
发表于 2010-10-22 21:33 | 只看该作者
用SQL证明奥数哥的答案已是最大的:

WITH t(str,occur,intv,c,lvl) AS (
SELECT '9' str
      ,'0000000001' as occur         ---- 每个数字出现次数
      ,'0000000000000000000' intv    ---- 哪些间隔已被用过
      ,9 c
      ,1 FROM DUAL
UNION ALL
SELECT str||rn
      ,SUBSTR(occur,1,rn)||(CASE WHEN rn=c-1 THEN '1' ELSE '2' END)||SUBSTR(occur,rn+2)
      ,CASE WHEN rn=c-1 THEN intv
            ELSE SUBSTR(intv,1,LENGTH(str)-INSTR(str,rn))||'1'||SUBSTR(intv,LENGTH(str)-INSTR(str,rn)+2)
       END
      ,LEAST(c,rn)
      ,lvl+1
  FROM t
      ,(SELECT ROWNUM-1 rn FROM DUAL CONNECT BY ROWNUM<=10)
WHERE str >= SUBSTR('99878675432106520134',1,LENGTH(str)) AND   ---- 人肉加速器. 如果代入野花的99878675432103526401,结果相同
       (rn=c-1
        OR (rn>=c
            AND SUBSTR(occur,rn+1,1)='1'
            AND SUBSTR(intv,LENGTH(str)-INSTR(str,rn)+1,1)='0'
            )
       )
)
SELECT MAX(str)
  FROM t
WHERE INSTR(occur,'1')=0;

MAX(STR)
-----------------------------------------
99878675432106520134

Elapsed: 00:00:00.03

使用道具 举报

回复
论坛徽章:
1
ITPUB9周年纪念徽章
日期:2010-10-08 09:28:51
276#
发表于 2010-10-25 17:58 | 只看该作者
原帖由 lastwinner 于 2010-10-21 12:34 发表



愿闻其详



数学归纳法的证明方法如下:

分两步,
首先,
(1)K 个节点,其中有最少边的节点,其边数不能超过 [K/2]("[]"表示取整,下同)。
证明:
因为若超过 [K/2],则某节点 K<1> 至少与 K<2>,K<3>,K<4>,……,K<[K/2]+1>,K<[K/2]+2> 有连接("<>"表示下标,下同),
且 K<2> 至少与 K<1>,K<[K/2]+3>,K<[K/2]+4>,K<[K/2]+5>,……,K<[K/2]*2+1>,K<[K/2]*2+2> 有连接。
显然下标 [K/2]*2+2 已经大于总节点数 K,说明 K<2> 与 K<1> 有相同连接的节点,即出现了“三角形”,不满足题目要求。
因此,(1)得证。

(2)若 K 个节点最多 N 条边,则 K+1 个节点最多 N+[(K+1)/2] 条边。
反证法:
由(1)可知,K+1 个节点时,其中有最少边的节点,其边数不能超过 [(K+1)/2],
若 K+1 个节点连接了多于 N+[(K+1)/2] 条边,去掉最少边的节点,剩下 K 个节点的边数就一定多于 N,与题设矛盾。
故(2)得证。

使用道具 举报

回复
论坛徽章:
1
ITPUB9周年纪念徽章
日期:2010-10-08 09:28:51
277#
发表于 2010-10-25 18:01 | 只看该作者
这样就可以推啦~~

K=4 时,N=4 =>
K=5 时,N=4+2=6 =>
K=6 时,N=6+3=9 =>
。。。。。。。。

嘿嘿

使用道具 举报

回复
论坛徽章:
1
ITPUB9周年纪念徽章
日期:2010-10-08 09:28:51
278#
发表于 2010-10-25 18:23 | 只看该作者
K>2 时通项:
(K-2)^2 + (K-2)/2 - (-1)^K * (K-2)/2

使用道具 举报

回复
论坛徽章:
520
奥运会纪念徽章:垒球
日期:2008-09-15 01:28:12生肖徽章2007版:鸡
日期:2008-11-17 23:40:58生肖徽章2007版:马
日期:2008-11-18 05:09:48数据库板块每日发贴之星
日期:2008-11-29 01:01:02数据库板块每日发贴之星
日期:2008-12-05 01:01:03生肖徽章2007版:虎
日期:2008-12-10 07:47:462009新春纪念徽章
日期:2009-01-04 14:52:28数据库板块每日发贴之星
日期:2009-02-08 01:01:03生肖徽章2007版:蛇
日期:2009-03-09 22:18:532009日食纪念
日期:2009-07-22 09:30:00
279#
发表于 2010-10-25 21:52 | 只看该作者
"(2)若 K 个节点最多 N 条边,则 K+1 个节点最多 N+[(K+1)/2] 条边。"

你的证明是不超过N+[(K+1)/2],怎么证明这个N+[(K+1)/2]是可以达到的?

使用道具 举报

回复
论坛徽章:
1
ITPUB9周年纪念徽章
日期:2010-10-08 09:28:51
280#
发表于 2010-10-26 09:42 | 只看该作者
原帖由 newkid 于 2010-10-25 21:52 发表
"(2)若 K 个节点最多 N 条边,则 K+1 个节点最多 N+[(K+1)/2] 条边。"

你的证明是不超过N+[(K+1)/2],怎么证明这个N+[(K+1)/2]是可以达到的?


汗。。。这不是鹦鹉哥要求证的么^^


========================================================
鹦鹉哥说:

原帖由 lastwinner 于 2010-10-21 12:34 发表
QUOTE:原帖由 nlrte13 于 10-10-21 11:51 发表


用数学归纳法可以证明你那方法得到的是最大的^^



愿闻其详


========================================================

[ 本帖最后由 nlrte13 于 2010-10-26 10:01 编辑 ]

使用道具 举报

回复

您需要登录后才可以回帖 登录 | 注册

本版积分规则 发表回复

TOP技术积分榜 社区积分榜 徽章 团队 统计 知识索引树 积分竞拍 文本模式 帮助
  ITPUB首页 | ITPUB论坛 | 数据库技术 | 企业信息化 | 开发技术 | 微软技术 | 软件工程与项目管理 | IBM技术园地 | 行业纵向讨论 | IT招聘 | IT文档
  ChinaUnix | ChinaUnix博客 | ChinaUnix论坛
CopyRight 1999-2011 itpub.net All Right Reserved. 北京盛拓优讯信息技术有限公司版权所有 联系我们 未成年人举报专区 
京ICP备16024965号-8  北京市公安局海淀分局网监中心备案编号:11010802021510 广播电视节目制作经营许可证:编号(京)字第1149号
  
快速回复 返回顶部 返回列表