我长期以来一直坚持这个问题。它必须具有动态编程解决方案,因为它已被标记为"动态编程"。请提出一个方法。
含糊不清的问题陈述:
每个岛上有3个岛屿有N个城市。从岛上的每个城市到另一个岛上的每个城市都有一条路径,即。连接同一个岛上的城市没有路径。查找访问所有3 * N个城市的方式。请注意,如果3 * N城市的连续相同或第一次旅行的3 * N城市的连续与第2次旅行的3 * N城市的连续相同,则2次旅行是相同的,向后阅读(例如,如果每个岛屿有一个城市,根据岛屿的编号编号,1-2-3-1和1-3-2-1的旅行将是相同的。)
约束:
1≤N≤30
示例输入/输出:
对于N = 2,答案= 16。
答案 0 :(得分:2)
这只是我的想法:
首先,如果我们能解决两个子问题,我们可以解决问题
假设您需要生成长度为3 * N的字符串仅从1,2或3 ,计算我们可以创建此字符串的方式,条件是是连续2次出现为1,2或3,对于每种类型的字符,字符串中应该有N个。您可以使用DP
其次,从创建的所有字符串中删除第一个字符,因为字符串可以向前和向后同等读取,因此每个字符串将被计数两次,除了回文 。所以,我们需要计算那些3 * N - 1弦的回文数。这可以通过DP
而且,现在,我们可以将字符串中的1,2或3的每个位置替换为岛1,2或3中的一个城市,并且每个字符串都有(N!)^ 3方式来做,并且我们有答案