• 全部
  • 问答

看看这个题目有没有一种策略求解?

Player1005 2008-04-10 06:08:23
在一个5×5的方格里,每个方格分别可以写下1~4任意一个数字,条件是:
一,“1”可以填在任意格内
二,填写“2”的一格的邻边格至少要有一格填写数字是“1”
三,填写“3”的一格的邻边格至少要有一格填写数字是“1”,至少要有一格数字填写是“2”
四,填写“4”的一格的邻边格至少要有一格填写数字是“1”,至少要有一格数字填写是“2”,至少要有一格数字是“3”

求:如何填写满所有的二十五格,可将格内数值之和求得最大值?

注:斜边格不算
...全文
146 点赞 收藏 15
写回复
15 条回复
切换为时间正序
当前发帖距今超过3年,不再开放新的回复
发表回复
xibeitianlang 2008-04-25
又把4写成5了,4的个数4~7。
回复
xibeitianlang 2008-04-25
2 1 2 1 2
4 3 4 3 4
1 2 1 2 1
4 3 4 3 4
2 1 2 1 2
人工找到的可行解,总和为59。重新调整穷举策略,1的个数7~9;2的个数7~9;3的个数4~7;5的个数4~7。
回复
xibeitianlang 2008-04-24
求最优解,首先要求出所有可行解,即所有满足规则的解。
一、规则演绎,除了1以外,其他2、3、4的邻边格必须有1,所以1的分布必须能覆盖全盘;
二、选择好1以后,在剩下的空格中,2可以任意摆放,而3、4的邻边格中必须有2,所以2的分布必须能覆盖除1以外剩余的所有格;
三、1、2排好后,3可以放在剩下的任意一格,而4的邻边格必须有3,所以3要覆盖除1、2以外的所有格;
四、1、2、3排好后,用4填充剩余空格,即得到一个可行解;
五、穷举所有的可行解,计算数值之和,选择最大值即为所求,答案可能有几组最优解。
六、穷举策略,由于求最大值,所以1要尽量少,当1的数目达到10个时,还有15格空格,按2、3、4平均5个算,总和为55不可能超过4楼的58得到最优解,因此1的个数在10以内,为了保险起见可考虑1的个数为7..10;同理2的个数为6..9;3的个数为5..8;4的个数为4..7。由于规则的约束5的个数应尽量多,但绝对到不了8个。这样搜索的范围将会大大缩小,以上建议,希望编程者考虑。
回复
arong1234 2008-04-23
基本思路:如果一条路径是最优的,则中间的每段路径都是最优的
我首先想到能排成的九宫,这样中间一个4最大的利用了1,2,3
1 4 2
4 4 4
x 4 3

由于左、右侧中间的一个4周围需要3个数,因此它不能在边上,因此这个9宫应该在5x5方格正中间
为了最大利用4,我们设置x=4得到

1 4 2
4 4 4
4 4 3
最上一排应该是24341才能最大
2 4 3 4 1
1 4 2
4 4 4
4 4 3
左侧排入2个4则无法求解,我们放入1个4,2个3,最后得到

2 4 3 4 1
4 1 4 2 3
3 4 4 4 4
2 4 4 3 1
3 1 4 2 3


希望各位有更好的解

回复
arong1234 2008-04-23
基本思路:如果一条路径是最优的,则中间的每段路径都是最优的
我首先想到能排成的九宫,这样中间一个4最大的利用了1,2,3
1 4 2
4 4 4
x 4 3

由于左、右侧中间的一个4周围需要3个数,因此它不能在边上,因此这个9宫应该在5x5方格正中间
为了最大利用4,我们设置x=4得到

1 4 2
4 4 4
4 4 3
最上一排应该是24341才能最大
2 4 3 4 1
1 4 2
4 4 4
4 4 3
左侧排入2个4则无法求解,我们放入1个4,2个3,最后得到

2 4 3 4 1
4 1 4 2 3
3 4 4 4 4
2 4 4 3 1
3 1 4 2 3


希望各位有更好的解

回复
arong1234 2008-04-23
那要5^25=大概3*10^17运算,假定每秒算一个,需要9*10^9年
快一点,假定1微妙算一个,需要9000年

[Quote=引用 6 楼 jzh2004 的回复:]
穷举法,从某一格开始放,计算放入数字总和,取最大值
[/Quote]
回复
沪php攻城师 2008-04-23
[Quote=引用 9 楼 arong1234 的回复:]
基本思路:如果一条路径是最优的,则中间的每段路径都是最优的
我首先想到能排成的九宫,这样中间一个4最大的利用了1,2,3
1 4 2
4 4 4
x 4 3

由于左、右侧中间的一个4周围需要3个数,因此它不能在边上,因此这个9宫应该在5x5方格正中间
为了最大利用4,我们设置x=4得到

1 4 2
4 4 4
4 4 3
最上一排应该是24341才能最大
2 4 3 4 1
1 4 2
4 4 4
4 4 3
左侧排入2个4则无法求…
[/Quote]

你的答案中间一个4边上全是4,而且你这个是人工算出来的,你要计算机执行的话要写个算法,结果还是不停递归穷举
回复
沪php攻城师 2008-04-23
[Quote=引用 7 楼 arong1234 的回复:]
那要5^25=大概3*10^17运算,假定每秒算一个,需要9*10^9年
快一点,假定1微妙算一个,需要9000年

引用 6 楼 jzh2004 的回复:
穷举法,从某一格开始放,计算放入数字总和,取最大值
[/Quote]

有这么多吗?你就不算限定条件了?不是没有条件的穷举!
回复
rodney1983 2008-04-23
2 4 3 4 1
4 1 4 2 3
3 4 4 4 4
2 4 4 3 1
3 1 4 2 3
不符合条件了。
另外穷举应该可以找到的,周末试试。
回复
rodney1983 2008-04-22
顶下
回复
沪php攻城师 2008-04-22
穷举法,从某一格开始放,计算放入数字总和,取最大值
回复
xibeitianlang 2008-04-18
2 1 3 1 2
4 3 2 4 3
1 4 1 2 1
3 2 4 3 4
2 1 2 1 2

步骤1:放置尽量少的1,覆盖全盘;
步骤2:从左上角开始尝试,1不变,其余尽量大。
回复
oo 2008-04-11
晕,排错了,不满足规则
回复
oo 2008-04-11
14241
43134
21212
43134
14241
只想了这么一个,不知道算不算比较大,没头绪
回复
Player1005 2008-04-11
没有高手帮忙提个建议吗?我实在有点摸不到头脑.
回复
相关推荐
发帖
数据结构与算法
创建于2007-08-27

3.2w+

社区成员

数据结构与算法相关内容讨论专区
申请成为版主
帖子事件
创建了帖子
2008-04-10 06:08
社区公告
暂无公告