一个小算法题目

wangzhen199009 2015-03-16 09:42:48
有n条记录(n<1000),每个记录有两个子段letters和value。其中letters中均含有三个不同字母(26个字母之中),并且不存在任意两条记录的letters完全相同。value为一个整数。现在要从这n条记录中筛选出一些记录,使得这些记录的letters字段交集为空,并且保证这些记录的value字段之和最大。分析解决思路
用例:
ABC 20
DEF 20
EPQ 15
FLM 15
XYZ 5
则要求的结果就是(ABC)(EPQ)(FLM)(XYZ)
...全文
373 8 打赏 收藏 转发到动态 举报
写回复
用AI写文章
8 条回复
切换为时间正序
请发表友善的回复…
发表回复
super_miker 2015-04-07
  • 打赏
  • 举报
回复
我所想到的是深度优先+剪枝 如果当前剩余的集合中最大可能值小于已经搜索到的最优值那就不需要继续搜索了。 顺便最好在搜索之前排序一遍。 此外可以把letter转换为一个26位的整数(可以用32位的整数类型如int存放),这样可以用位操作简化运算。 在此基础上可以加个记忆化搜索,如果搜索到的新组合和原有组合一样可以利用已经搜索到的值,那就不需要再往后搜索了。
li_x1979 2015-03-25
  • 打赏
  • 举报
回复
估计得用回溯来穷举了。4楼的已经说了这个问题用图来表示就是求带权最大独立集,现在求最大独立集都没有好的办法。
wangzhen199009 2015-03-24
  • 打赏
  • 举报
回复
引用 2 楼 zhouxiaofeng1021 的回复:
S{a-z}表示包含26个字母的最大值和 S{a-z} = S{a-k} +S{k-z} 这样就可以对每个记录中字母最大值进行排序 接下来采用贪心算法,就像时间安排那样 还是采用动态规划~~~ 还没想好!!!
能详细点不,感觉使用S{*},那么S{*}可能的取值也很大吧
wangzhen199009 2015-03-24
  • 打赏
  • 举报
回复
引用 1 楼 FancyMouse 的回复:
NP-complete是逃不了的。要么硬搜,要么用它的整数规划形式描述套用个整数规划求解器算
能详细点吗,哥!写论文用的,就差这个点了
yubinyuleo 2015-03-19
  • 打赏
  • 举报
回复
转换为图。带权最大独立集
cnmhx 2015-03-18
  • 打赏
  • 举报
回复
似乎不是np。 好像可以先定义等价类,在用置换群简化。
zhouxiaofeng1021 2015-03-17
  • 打赏
  • 举报
回复
S{a-z}表示包含26个字母的最大值和 S{a-z} = S{a-k} +S{k-z} 这样就可以对每个记录中字母最大值进行排序 接下来采用贪心算法,就像时间安排那样 还是采用动态规划~~~ 还没想好!!!
FancyMouse 2015-03-16
  • 打赏
  • 举报
回复
NP-complete是逃不了的。要么硬搜,要么用它的整数规划形式描述套用个整数规划求解器算

33,008

社区成员

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

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