社区
C++ 语言
帖子详情
求一算法
zhufeiguanghui
2008-12-23 01:14:44
现在要求给N个人分组,组数是从1到N,不同组中的任意两个人进行比赛,同一组的人之间不进行比赛,求比赛的总次数可能为多少?
...全文
130
9
打赏
收藏
求一算法
现在要求给N个人分组,组数是从1到N,不同组中的任意两个人进行比赛,同一组的人之间不进行比赛,求比赛的总次数可能为多少?
复制链接
扫一扫
分享
转发到动态
举报
写回复
配置赞助广告
用AI写文章
9 条
回复
切换为时间正序
请发表友善的回复…
发表回复
打赏红包
yinjor
2008-12-24
打赏
举报
回复
按各队按人数大小由大到小排序.
5,4,3,2
5*(4+3+2) + 4*(3+2) + 3*(2)
看到这个过后,我想就应该没问题了吧
zlshum
2008-12-24
打赏
举报
回复
这个问题是集合的划分等价类个数问题的演变问题
(1)求得n的所有等价类个数B(n)=Sum{k=0,n-1}B(k)Cnk B(0)=B(1)=1(这个组合数学书上有很多证明,Cnk表示组合数n中树中取k个不同数的个数)
(2)B(n)就是所有的分组数,现在再看一下一个分组情况下一个分组时候有多少比赛?
设有p个分组,a[p]表示每个对应组中的人数,则有
约束:Sum{i=0,p-1}a[i]=N,a[i]>=1
比赛总数为:
Sum{i=0,p-1}(N-Sum{k=0,i}a[k])a[i]
(3)将上面两个综合分析,不难得出结论:同样是一个递归式
就是所有比赛数
C(n) = Sum{k=0,n-1} C(k)Cnk(n-k)k
这里c(0)=0,c(1)=1(实际上c(1)=0(忽略))
caremsi
2008-12-23
打赏
举报
回复
mark,顶
wiowei
2008-12-23
打赏
举报
回复
百度之星这题我用DP做了下,lz可以参考下,仅用了些数据测试,不保证是答案。。。
http://blog.csdn.net/wiowei/archive/2008/12/23/3590504.aspx
sincor
2008-12-23
打赏
举报
回复
我觉得你可以去研究研究书上有个例子 就是打印 乘法口诀表
zhufeiguanghui
2008-12-23
打赏
举报
回复
其实这是百度之星程序设计大赛的试题,想了半天也没想出个好思路来,高手快来啊,原题如下:
为了促进各部门员工的交流,百度 (baidu) 举办了一场全公司范围内的 " 拳皇友谊赛 " ,负责组织这场比赛的是百度的超级 " 拳皇 " 迷 W.Z. W.Z 不想用传统的淘汰赛或者循环赛的方式,而是自己制定了一个比赛规则。
由于一些员工(比如同部门或者相临部门员工)平时接触的机会比较多,为了促进不同部门之间的交流, W.Z 希望员工自己组成不同组。不同组之间的每两个人都会进行一场友谊赛而同一组内的人则之间不会打任何比赛。
比如 4 个人,编号为 1--4, 如果分为两个组并且 1,2 一个组, 3 , 4 一个组,那么一共需要打四场比赛: 1 vs 3,1 vs 4,2 vs 3,2 vs 4. 而如果是 1,2,3 一组, 4 单独一组,那么一共需要打三场比赛 : 1 vs 4,2 vs 4,3 vs 4.
很快 W.Z 意识到,这样的比赛规则可能会让比赛的场数非常多。 W.Z 想知道如果有 N 个人 , 通过上面这种比赛规则,总比赛场数有可能为 K 场吗?比如 3 个人,如果只分到一组则不需要比赛,如果分到两组则需要 2 场比赛 , 如果分为三组则需要 3 场比赛。但是无论怎么分都不可能只需要 1 场比赛。
相信作为编程高手的你一定知道该怎么回答这个问题了吧? 那么现在请你帮助 W.Z 吧。
输入
每行为一组数据,包含两个数字 N, K 。 (0<N<=500, K>=0)
输出
对输入的 N,K 如果 N 个员工通过一定的分组方式可能会一共需要 K 场比赛,则输出 "YES", 否则输出 "NO", 每组数据占一行。
所有的输入输出均为标准输入输出。
例子
输入文件 :
2 0
2 1
3 1
3 2
输出 :
YES
YES
NO
YES
Jack_xiao
2008-12-23
打赏
举报
回复
没有限定必须每个人都参加,每个人参加的次数
可能性太多了
zhaolinger2
2008-12-23
打赏
举报
回复
更明确的算法:
定义sum=0
分组数从1到N循环
计算将N个人分配到每个循环中的分组中的所有分配方案
统计处以上的分配方案的总数
组号从1到分配方案的总数循环
根据每一个组的人数n,计算n*(n-1)/2并累计到sum中
组号循环结束
分组数循环结束
输出sum。
zhaolinger2
2008-12-23
打赏
举报
回复
可能性太多了。
基本思路是:首先确定分多少组,然后分别确定每个组的人数,再根据每个组的人数计算每个组各自需要比赛的次数(单循环的比赛次数是n*(n-1)/2),然后再把所有的加起来,over.
【每日一
算法
】求众数
本文解析了一种求解数组中众数的
算法
,通过使用map数据结构来统计每个元素出现的频率,从而找出出现次数超过数组一半的众数元素。
每日一
算法
:筛选法求素数
本文介绍了一种著名的求质数方法——埃拉托斯特尼筛法,并详细解释了其工作原理及实现步骤。通过此方法,可以在较短时间内找出一定范围内所有的质数。
每日一
算法
:求m^n的结果,m,n可以很大
本文深入分析了
算法
在解决阶乘与幂运算问题中的应用,通过C语言实现了一个高效的
算法
来计算大数的幂次方,并详细解释了其背后的数学原理和优化策略。
123 C++试写一
算法
,求随机输入的三个整数的最大值
该博客主要围绕C语言
算法
展开,提出编写一个
算法
来求随机输入的三个整数的最大值,并给出示例输入4、5、6,得出最大值为6,还提到只需写int max。
c语言中这么找中秋位数,大家中秋快乐 小弟想
求一
算法
该博客展示了如何在Visual C++6.0环境下使用列主元Gauss消元法求解线性方程组的过程,并提供了代码示例。虽然示例代码在TurboC中可能需要调整,但博主详细解释了
算法
的每一步,包括矩阵的输入、主元选择、消元过程以及解的输出。
C++ 语言
65,211
社区成员
250,514
社区内容
发帖
与我相关
我的任务
C++ 语言
C++ 语言相关问题讨论,技术干货分享,前沿动态等
复制链接
扫一扫
分享
社区描述
C++ 语言相关问题讨论,技术干货分享,前沿动态等
c++
技术论坛(原bbs)
社区管理员
加入社区
获取链接或二维码
近7日
近30日
至今
加载中
查看更多榜单
社区公告
请不要发布与C++技术无关的贴子
请不要发布与技术无关的招聘、广告的帖子
请尽可能的描述清楚你的问题,如果涉及到代码请尽可能的格式化一下
试试用AI创作助手写篇文章吧
+ 用AI写文章