返回   cpper编程论坛 > 算法
注册账号 论坛帮助 会员列表 日历事件 搜索 今日新帖 标记版面已读

回复
 
LinkBack 主题工具 显示模式
  #1 (permalink)  
旧 2007-08-14
高级会员
 
注册日期: 2002-09-15
帖子: 2,531
ajoo 正向着好的方向发展
默认 facebook的puzzle

Gridflip, 没想出多项式时间的解法来:

Facebook | Programming Puzzles
Digg this Post!Add Post to del.icio.usBookmark Post in TechnoratiFurl this Post!
回复时引用此帖
  #2 (permalink)  
旧 2007-08-15
bankrock 的头像
高级会员
 
注册日期: 2003-12-11
帖子: 847
文章: 7
bankrock 正向着好的方向发展
默认 回复: facebook的puzzle

我的思路是:如果有一系列的flip_col() and flip_row()可以产生满足题设的矩阵,则由于相邻的flip_col()和flip_row()可以相互交换而不影响最终结果,可以把这一系列的flip_col() and flip_row()整理为一系列的flip_row()跟着一系列的flip_col()操作。这样前面的flip_row()操作可以将源矩阵转化为2^m个不同矩阵(每一行可以flip或者不flip,共m行),这2^m个矩阵的每列元素如果为负,则需要flip_col,如果为正则不需要进行flip_col。然后检查最终的结果矩阵是不是符合题设,将所有的可行矩阵计算出来后取S最小的那个。时间复杂度是O(2^m*m*n)
暂时只想到这么多,ajoo把你的非多项式时间的解法也讲讲看。
Digg this Post!Add Post to del.icio.usBookmark Post in TechnoratiFurl this Post!
回复时引用此帖
  #3 (permalink)  
旧 2007-08-16
高级会员
 
注册日期: 2002-09-15
帖子: 2,531
ajoo 正向着好的方向发展
默认 回复: facebook的puzzle

差不多也是这样吧。可以先判断行多还是列多,先从少的那个轴开始走,会快一些。不过你忽略了和为0的情况,这时候可能要翻和不翻都试一遍的。所以似乎最坏情况是2^(m+n)

觉得应该有更聪明的算法的,否则他们给你一个30*30的数据,不就歇了?
Digg this Post!Add Post to del.icio.usBookmark Post in TechnoratiFurl this Post!
回复时引用此帖
  #4 (permalink)  
旧 2007-08-30
Elminster 的头像
超级版主
 
注册日期: 2002-09-09
帖子: 1,764
Elminster 正向着好的方向发展
默认 回复: facebook的puzzle

这题看着象 NPC 的,可能没有多项式算法。想了一阵,也没有什么直观的方法,可以考虑转成线性规划去做。
Digg this Post!Add Post to del.icio.usBookmark Post in TechnoratiFurl this Post!
回复时引用此帖
回复

书签

主题工具
显示模式

发帖规则
不可以发表新主题
不可以发表回复
不可以上传附件
不可以编辑自己的帖子

启用 BB 代码
论坛启用 表情符号
论坛启用 [IMG] 代码
论坛禁用 HTML 代码
Trackbacks are 启用
Pingbacks are 启用
Refbacks are 启用



所有时间均为格林尼治时间 +9。现在的时间是 07:09 AM


Powered by vBulletin® 版本 3.7.0
版权所有 ©2000 - 2009,Jelsoft Enterprises Ltd.
(C) Copy Right All Right Reserved 2001 - 2007

Search Engine Friendly URLs by vBSEO 3.1.0