这个问题要求我们找出在N*M网格上放置R个硬币的方法的数量,使得每行和每列至少有一个硬币。给定的约束是N,M< 200,R< N*M。我最初想要回溯,但我意识到它永远不会及时完成。有人能帮我找到另一个解决方案吗?(DP,闭合形式公式。)任何指针都会很好。谢谢。
发布于 2012-07-25 01:59:34
这很难,但如果你一开始就计算出每行和每列至少有一枚硬币的方法(称之为储备硬币)。答案将是#1 (n! / r! (n - r)!) *的乘积,其中#2 n = N*M - NUMBER_OF_RESERVE_COINS和#3 r = (R - NUMBER_OF_RESERVE_COINS)对应于#4,每行/列保留一枚硬币。
#4是更棘手的事情发生的地方。对于N*M,其中N!=M,abs(N-M)将告诉您单行/列上将有多少个储备硬币。我在寻找下一步的正确方法时遇到了麻烦,主要是因为时间不够(虽然我可以在周末回到这里),但我希望我已经为您提供了有用的信息,如果我所说的是正确的,您将能够完成这一过程。
https://stackoverflow.com/questions/11635567
复制相似问题