【发布时间】:2014-09-15 20:10:54
【问题描述】:
我正在为即将举行的编程竞赛进行复习,并且正在解决以下问题:
给定一个整数列表、一个整数 t、一个整数 r 和一个整数 p,确定该列表是否包含 t 个 3 组、r 个 3 组和 p 对数字。对于这些子集中的每一个,数字必须是相邻的,并且任何给定的数字只能存在于一个子集中(如果有的话)。
目前,我通过简单地查找所有 3 个、3 个运行和对的集合来解决问题,然后检查所有排列,直到找到一个没有重叠子集的排列。但是,这似乎效率低下,我想知道是否有更好的解决方案。
这里有两个问题的例子:
{1, 1, 1, 2, 3, 4, 4, 4, 5, 5, 1, 0}, t = 1, r = 1, p = 2。
这是有效的,因为我们有三元组 {4 4 4}、运行 {1 2 3} 以及对 {1 1} 和 {5 5}
{1, 1, 1, 2, 3, 3}, t = 1, r = 1, p = 1
这不起作用,因为唯一的三元组是 {1 1 1} 并且唯一的运行是 {1 2 3} 并且两者重叠(它们共享一个 1)。
我正在寻找一种更有效的方法来解决这个问题。
【问题讨论】:
-
必须一组 3 个或一对包含连续的元素?
-
是的,它们必须是连续的元素。
标签: algorithm optimization subset