无和集问题

纯净水o 2010-06-21 03:22:56
问题描述:设S是正整数集合。S是一个无和集,当且仅当x,y∈S,蕴含x+y!∈(不蕴含)s.
对于任意正整数k,如果可将{1,2,...k}划分为n个无和子集s1,s2...sn,称正整数k是n可分的.记f(n)=max{k|k是n可分的}试设计一个算法,对人一个定的n计算f(n)的值

数据输入:正整数n
结果输出:将计算的F(n)的值以及{1,2...f(n)}的一个n划分输出到文件output.txt.文件的第一行是f(n)的值,接下来的n行,每一行是一个无和子集Si.

输入文件示例:
2
输出文件示例
8
1 2 4 8
3 5 6 7


这个题我并不是很理解,
比如说
输入2

那么输出文件
2

1
2
这个成立么?
或者
3

1 2
3
这个成立么?

或者
6
1 3 6
2 4 5这个呢?
...全文
791 31 打赏 收藏 转发到动态 举报
写回复
用AI写文章
31 条回复
切换为时间正序
请发表友善的回复…
发表回复
virus1992 2012-05-13
  • 打赏
  • 举报
回复
[Quote=引用 17 楼 的回复:]

能想到的方法就是回溯搜索,
也是维护n个数组,
对每个当前要加入的数,可以求得可放入的数组的集合,作为该数的回溯状态集合。

如果到某个数不能放入了,
比较并更新历史积累的最大数,然后回溯。

再就是对可回溯的状态的表示,
或许可以用“最小表示法”,避免对重复的搜索状态。
[/Quote]

求可放入的集合用什么方法?
枚举好累的说,有更优的方法么。
showjim 2010-06-25
  • 打赏
  • 举报
回复
明天把“失败链”加入到程序中,效果应该会好一些,下星期再说
showjim 2010-06-25
  • 打赏
  • 举报
回复
[Quote=引用 27 楼 michael122 的回复:]
程序一边在跑,一边在贴结果吧。。
跑了多久啊?
[/Quote]
现在f(4)用十几秒,f(5)跑了两三小时了
showjim 2010-06-25
  • 打赏
  • 举报
回复
搜索+减枝+猜测,程序的减枝还没写完,下个星期看看效果
michael122 2010-06-25
  • 打赏
  • 举报
回复
程序一边在跑,一边在贴结果吧。。
跑了多久啊?
fire_woods 2010-06-25
  • 打赏
  • 举报
回复
楼上是遍历出来的吗?
好强大.
michael122 2010-06-25
  • 打赏
  • 举报
回复
ls说说用什么方法做的?
showjim 2010-06-25
  • 打赏
  • 举报
回复
1,2,4,8,11,22,25,53,66,145,150,173,178,191

3,5,6,7,19,21,23,50,51,52,63,64,65,135,146,147,148,175,176,177,188,189,190

9,10,12,13,14,15,16,17,18,20,54,55,56,57,58,59,60,61,62,136,137,138,139,140,141,142,143,144,179,180,181,182,183,184,185,186,187

24,26,27,28,29,30,31,32,33,34,35,36,37,38,39,40,41,42,43,44,45,46,47,48,49,149,151,152,153,154,155,156,157,158,159,160,161,162,163,164,165,166,167,168,169,170,171,172,174

67,68,69,70,71,72,73,74,75,76,77,78,79,80,81,82,83,84,85,86,87,88,89,90,91,92,93,94,95,96,97,98,99,100,101,102,103,104,105,106,107,108,109,110,111,112,113,114,115,116,117,118,119,120,121,122,123,124,125,126,127,128,129,130,131,132,133,134
showjim 2010-06-25
  • 打赏
  • 举报
回复
[Quote=引用 22 楼 sbwwkmyd 的回复:]
f(5)=189 瞎猜的
[/Quote]
猜错了
1,2,4,8,11,22,25,53,66,144,149,172,177,190

3,5,6,7,19,21,23,50,51,52,63,64,65,145,146,147,174,175,176,187,188,189

9,10,12,13,14,15,16,17,18,20,54,55,56,57,58,59,60,61,62,135,136,137,138,139,140,141,142,143,178,179,180,181,182,183,184,185,186

24,26,27,28,29,30,31,32,33,34,35,36,37,38,39,40,41,42,43,44,45,46,47,48,49,148,150,151,152,153,154,155,156,157,158,159,160,161,162,163,164,165,166,167,168,169,170,171,173

67,68,69,70,71,72,73,74,75,76,77,78,79,80,81,82,83,84,85,86,87,88,89,90,91,92,93,94,95,96,97,98,99,100,101,102,103,104,105,106,107,108,109,110,111,112,113,114,115,116,117,118,119,120,121,122,123,124,125,126,127,128,129,130,131,132,133,134
showjim 2010-06-23
  • 打赏
  • 举报
回复
f(5)=189 瞎猜的
fire_woods 2010-06-23
  • 打赏
  • 举报
回复
如果没有办法构造的话,看来就是NP的了.
michael122 2010-06-23
  • 打赏
  • 举报
回复
也就是说目前还没人能解决?
这是np问题吧
FancyMouse 2010-06-23
  • 打赏
  • 举报
回复
这帖子一开就会被墙……真那啥……

>哈哈,这也太慢了点。。
dp么?
嗯。如果答案是m的话时间复杂度n*4^m,空间复杂度n*2^m。n=4的时候m的下界就有39,时间空间都挂。那篇论文里算n=4也就是上了若干剪枝而已。
LeonTown 2010-06-22
  • 打赏
  • 举报
回复
能想到的方法就是回溯搜索,
也是维护n个数组,
对每个当前要加入的数,可以求得可放入的数组的集合,作为该数的回溯状态集合。

如果到某个数不能放入了,
比较并更新历史积累的最大数,然后回溯。

再就是对可回溯的状态的表示,
或许可以用“最小表示法”,避免对重复的搜索状态。
绿色夹克衫 2010-06-22
  • 打赏
  • 举报
回复
哦,看来太难了,白想了半天,不是我这种水平可以搞的。
LeonTown 2010-06-22
  • 打赏
  • 举报
回复
哦,
“无和集”可能是集合中元素的和不出现在该集合中,
然后还要“可n分”,分成n个“无和集”子集。
michael122 2010-06-22
  • 打赏
  • 举报
回复
你看题呀。。。

问题描述:设S是正整数集合。S是一个无和集,当且仅当x,y∈S,蕴含x+y!∈(不蕴含)s.
对于任意正整数k,如果可将{1,2,...k}划分为n个无和子集s1,s2...sn,称正整数k是n可分的

[Quote=引用 12 楼 leontown 的回复:]

引用 11 楼 michael122 的回复:
就是说f(n)是可n分的集合{1,...,k}的最大的k
f(2)=8就是说可2分的集合最大就是{1,...,8},没有比8更大的了


非常感谢!

那什么是“可n分”呢?。。。
[/Quote]
超级大笨狼 2010-06-22
  • 打赏
  • 举报
回复
不知道什么是无和集,飘过。。。
LeonTown 2010-06-22
  • 打赏
  • 举报
回复
[Quote=引用 11 楼 michael122 的回复:]
就是说f(n)是可n分的集合{1,...,k}的最大的k
f(2)=8就是说可2分的集合最大就是{1,...,8},没有比8更大的了
[/Quote]

非常感谢!

那什么是“可n分”呢?。。。
michael122 2010-06-22
  • 打赏
  • 举报
回复
就是说f(n)是可n分的集合{1,...,k}的最大的k
f(2)=8就是说可2分的集合最大就是{1,...,8},没有比8更大的了
加载更多回复(11)

33,010

社区成员

发帖
与我相关
我的任务
社区描述
数据结构与算法相关内容讨论专区
社区管理员
  • 数据结构与算法社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧