这个简单游戏的高效算法

时间:2015-07-26 08:57:17

标签: c algorithm optimization

我们有N型1型和M型2型硬币。游戏板具有N型1型和M型2型。在这个游戏中,我们必须将一枚硬币放入每个方格。放置所有硬币后,我们将根据我们的硬币放置策略获得分数。

如果type-1 square包含type-1硬币,那么我们将获得A点,如果type-2 square包含type-2硬币,那么我们将得到B点,而在所有其他情况下,我们将得到C点。我们的总比赛得分将是所有广场的得分总和。

可用的用户输入是(N,M,A,B,C)

我们如何才能最大化我们的分数?

例如,如果N = 3 M = 4 A = 500 B = 800 C = 600

通过最优策略,我们将3个1型硬币放入3个1型方格中,得分= 500 + 500 + 500 = 1500,我们将4个2型硬币放入4个2型2格得分= 800 + 800 + 800 + 800 = 3200,因此总得分为1500 + 3200 = 4700

1 个答案:

答案 0 :(得分:1)

这很简单。一个明显有效的解决方案是将所有1型硬币放置在1型方格。这会给你一定的分数。我们现在可以用2型硬币交换任何1型硬币。这样做,我们将失去A + B分,但获得2 C。因此,只有2 C > A + B才能进行交换。我们可以交换min(N, M)次。所以最高分是:

nSwaps =  
    if 2 * C > A + B then
        min(N, M)
    else
        0
    end if

maxScore = N * A + M * B + nSwaps * (2 * C - A - B)
相关问题