不明白这句话的意思:n, S = map(int, input().split()) (动态规划中)

问题描述 投票:0回答:2

我正在尝试学习动态编程,但有一些难以理解的困难代码行。我不知道我们应该如何处理这些代码行:

n, S = map(int, input().split())
w = list(map(int, input().split()))
dp = [0] * (S + 1)
dp[0] = 0
python algorithm variables dynamic
2个回答
4
投票

这和动态规划本身没有太大关系。

n, S = map(int, input().split())

将查询用户的输入,然后将其拆分为单词,将这些单词转换为整数,并将其解压为两个变量

n
S
。因此,当用户输入两个数字(不多也不少)时就会成功。

其工作原理如下:

  1. input()
    将查询用户输入,并读取一行用户输入;
  2. .split()
    会将输入拆分为“单词”列表;
  3. map(int, ...)
    会在每个单词上调用
    int
    ,它会懒惰地调用(尽管这在这里并不重要);和
  4. n, S = ...
    会将表达式解压为两个元素,并将第一个元素分配给
    n
    ,将第二个元素分配给
    S

例如:

>>> n, S = map(int, input().split())
14 25
>>> n
14
>>> S
25

但是如果你只传递一个数字,三个数字等,就会出错,例如:

>>> n, S = map(int, input().split())
14
Traceback (most recent call last):
  File "<stdin>", line 1, in <module>
ValueError: not enough values to unpack (expected 2, got 1)
>>> n, S = map(int, input().split())
14 25 37
Traceback (most recent call last):
  File "<stdin>", line 1, in <module>
ValueError: too many values to unpack (expected 2)
>>> n, S = map(int, input().split())
foo bar
Traceback (most recent call last):
  File "<stdin>", line 1, in <module>
ValueError: invalid literal for int() with base 10: 'foo'

线路:

w = list(map(int, input().split()))

或多或少做同样的事情,但是将用户的数字序列作为输入。可以有零个、一个或多个数字。

w
将存储数字列表。
list(..)
部分迫使 Python 急切地计算
map(..)

dp = [0] * (S + 1)

在这里,我们将构建一个包含

S + 1
零的列表。在 Python 中,您可以将列表(和元组)与整数 n 相乘。结果是一个列表(或元组),其大小是原始列表的 n 倍,并且它重复元素。例如:

>>> [1,4,2,5] * 3
[1, 4, 2, 5, 1, 4, 2, 5, 1, 4, 2, 5]

由于这里给定的列表包含 one 零,因此它将生成一个包含

S+1
零的列表。

终于

dp[0] = 0

将把第一个元素设置为零。但由于情况已经如此,这条线并不是很有用。


0
投票

兄弟,这很容易,对你来说怎么这么难?

© www.soinside.com 2019 - 2024. All rights reserved.