【问题标题】:Distance algorithm - minimum coins required to clear all the level距离算法 - 通关所有关卡所需的最少硬币
【发布时间】:2018-04-29 19:11:26
【问题描述】:

雷神正在玩一个有 N 个级别和 M 种可用武器的游戏。级别编号从 0 到 N-1,武器编号从 0 到 M-1。他可以以任何顺序清除这些级别。在每个级别中,需要这些 M 武器的某些子集才能通过此级别。如果在特定关卡中,他需要购买 x 个新武器,他将为此支付 x^2 个硬币。另请注意,他可以将他目前拥有的所有武器带到下一个级别。最初,他没有武器。你能找出他通关所有关卡所需的最低金币吗?

输入格式

输入的第一行包含 2 个空格分隔的整数:

N = 游戏中的关卡数

M = 武器种类的数量

N 行紧随其后。这些行的第i行包含一个长度为M的二进制字符串。如果这个字符串的第j个字符是1,这意味着我们需要一个类型为j的武器来清除第i个级别。

约束

1

1

输出格式

打印一个整数,它是问题的答案。

示例测试用例 1

输入

1 4 
0101

输出

4

解释

这个游戏只有一个关卡。我们需要 2 种武器 - 1 和 3。因为一开始,Thor 没有武器,他必须购买这些武器,这将花费他 2^2 = 4 个硬币。

示例测试用例 2

输入

3 3 
111
001
010

输出

3

解释

这个游戏有 3 个关卡。第 0 级 (111) 需要所有 3 种类型的武器。 1级(001)只需要2型武器。2级只需要1型武器。如果我们按照给定的顺序(0-1-2)通关,总成本= 3^2 + 0^2 + 0^2 = 9 个硬币。如果我们按照 1-2-0 的顺序通关,则需要花费 = 1^2 + 1^2 + 1^2 = 3 个硬币,这是最优的方式。

【问题讨论】:

  • 你有什么问题?
  • 这不是免费的家庭作业服务。请向我们展示您迄今为止为解决问题所做的尝试,以及您遇到问题的原因。 idownvotedbecau.se/noattempt
  • @Ravi Manna - 你有问题的链接吗?我有一个解决方案,想在此处发布之前对其进行测试。
  • @zenwraight - 我在一个网站上阅读了这个问题并尝试从那里解决,但是不确定要采取的方法。我尝试使用汉明距离,但遇到了一些测试用例。任何帮助将不胜感激。
  • stackoverflow.com/q/49772462/9254539 的完全相同的副本。但无法标记,因为我已经标记了这篇文章过于宽泛,因为它是一个家庭作业/竞争性编程问题转储。

标签: algorithm combinations hamming-distance


【解决方案1】:

Gassa's answer 的美妙之处部分在于,如果or使用当前状态的级别的位串掩码之一可以达到不同的状态,我们保证达到当前状态不包括访问此级别(因为否则这些位将已设置)。这意味着通过添加不同的位掩码来检查从一种状态到另一种状态的转换,保证我们正在查看尚未包含该掩码的排序。所以像 Gassa 的公式可以工作:让f(st) 代表达到状态st 的成本,那么:

f(st) = min(
  some known cost of f(st),
  f(prev_st) + (popcount(prev_st | level) - popcount(prev_st))^2
)
for all level and prev_st that or to st

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2021-11-09
    • 1970-01-01
    • 2016-01-25
    • 1970-01-01
    • 2016-07-04
    • 1970-01-01
    相关资源
    最近更新 更多