Questions tagged «dynamic-programming»


3
字符串数,每个字符必须出现偶数次
我已经为此问题problem了一段时间,这真的开始让我感到沮丧。问题是: 我有一个字符集,A,B,C,和D。我必须说出从这些字符中构建字符串的方式,长度是多少n,每个字符必须出现偶数次。 例如,答案为n = 24: AA BB CC DD 答案n = 4是40。其中一些有效的字符串是: AAAA AABB CACA DAAD BCCB 我坚持提出一个逻辑。我觉得可能会有一个DP解决方案。解决这个问题的方法是蛮横的:解决方案的数量迅速增长到巨大数量。 我试图在纸上画出各种想法,但没有成功。我几乎不得不放弃所有这些想法,因为它们的复杂性太大。该解决方案应有效n = 10^4。 我的想法之一是永远不要跟踪实际的字符串,而只能跟踪每个字符出现的是偶数还是奇数次。我无法提出一种应用此逻辑的方法。 谁能帮我?

2
如何更好地解决动态编程问题
我最近遇到了一个问题:“您得到一个布尔表达式,由字符串'true','false','and','or'和'xor'组成。计算括号的方法数量这样,表达式的结果将为true。例如,可以通过两种方式将“ true and false xor true”括起来,使其结果为true。” 我知道这是一个动态编程问题,因此我尝试自己提出一个解决方案,如下所示。假设我们有一个表达式为ABC .... D,其中“。” 代表任何运算,或xor和大写字母代表true或false。可以说,此大小为K的表达式产生真值的方式为N。当向该表达式添加新的布尔值E时,有两种方法可以使该新表达式成为括号。(((ABC .... D) .E),即 加上ABC .... D的所有可能括号,我们在末尾加上E。2.(ABC(DE)),即 首先评估DE,然后找到此大小为K的表达式产生真值的方式。 假设T [K]是大小为K的表达式产生真值的方式数,则T [k] = val1 + val2 + val3其中val1,val2,val3的计算如下。 1)当E与D分组时 i)它不会改变D的值 ii)反转D的值 在第一种情况下,val1 = T [K] = N。(因为这简化为初始ABC ... D表达式)。在第二种情况下,重新计算dp [K],其中D的值取反,即val1。 2)当E与整个表达式分组时。 // val2包含'true'的数量E将产生的表达式在所有带括号的ABC实例中给出'true'... D i)如果为true.E = true则val2 = N ii)如果为true.E = false,则val2 …

2
使用动态编程技术如何解决“披萨拣选问题”?
温克勒的披萨挑选问题: 一片圆形比萨饼饼n,其中切片i有面积,S_i即每个饼片的面积都不同。 食者爱丽丝(Alice)和鲍勃(Bob)轮流采摘切片,但在馅饼中留出多个空隙是不礼貌的(考虑到不允许这样做)。 因此,每个食者被限制采取与开放区域相邻的两个切片之一。爱丽丝先行,两个食客都在寻找尽可能多的馅饼。 如果Alice和Bob都能完美地发挥其比萨饼的消费量,那么动态编程算法将如何确定Alice吃多少馅饼? 我的理解: 在一般的DP问题中,我们继续寻找可以使用递归树或更紧密地使用DAG可视化的子问题。在这里,我没有找到任何线索可以找到这里的子问题。 在这里,对于给定的S_i集合,我们需要最大化Alice所吃的切片的面积。这将取决于从(n-1)个排列中选择一个披萨片的排列。在每n \ 2圈内,Alice会从两个可用选项中选择一个最大面积切片,这将为我们提供置换的切片总​​面积。我们需要找到所有此类排列的切片区域。然后从这些中最大化。 有人可以帮助我前进吗?
By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.