在维基百科中,背包的算法如下:
for i from 1 to n do
for j from 0 to W do
if j >= w[i] then
T[i, j] := max(T[i-1, j], T[i-1, j-w[i]] + v[i]) [18]
else
T[i, j] := T[i-1, j]
end if
end for
end for
Run Code Online (Sandbox Code Playgroud)
它与我在网上找到的所有示例的结构相同。
我无法理解的是,这段代码如何考虑到最大值可能来自较小的背包这一事实?例如,如果背包容量为 8,那么最大值可能来自容量 7 (8 - 1)。
我找不到任何逻辑来考虑最大值可能来自较小的背包。这是错误的想法吗?
algorithm recursion knapsack-problem dynamic-programming data-structures
假设你有一张K美元的账单.给出4个有价值的硬币{1,4,6,9}找到硬币的最小数量,其总和为K,当K用二进制表示时,表示输入的长度为log(K)
我尝试过动态编程,但我没弄明白.有没有人知道如何开始解决这个问题?这与背包问题有关,但我无法弄明白.
谢谢.
这是问题所在:SPOJ - SCALES
我在网上查了一下,在TopCoder和AoPS中找到了一些资料,但还是看不懂。请给我一些有关如何解决此问题的更多详细信息!
我正在遍历包含双精度数组的对象.名称已更改.想象一下,这是Lab样本的一个对象,我试图获得Sample对象的平面表示.
从:
Sample
{
public string Name
public string Type
...
public double[] RawReadings
}
Run Code Online (Sandbox Code Playgroud)
举例来说:
Name,
RawRead1,
RawRead2,
RawRead3,
...
RawReadn
Run Code Online (Sandbox Code Playgroud)
我如何finangle sample.RawReadings给我数组中的所有n项?我不在乎它的名字与否.
编辑为清晰起见:我希望结果列表中的每个项目都具有Name和类中的属性,与RawReads一样多.我不希望结果列表中的每个项目都有一个名称和一个数组 - 这将与我所拥有的相同.
示例LinQ:
from sample in Samples
select new
{
Name = sample.Name,
sample.RawReadings
}
Run Code Online (Sandbox Code Playgroud)
这甚至可能吗?
编辑: 我将此提供给第三方API调用,该调用期望"行和列格式".Aspose.Cells ImportCustomObject准确.有可能通过多次调用解决它并手动对齐它们,但这可能很棘手并且容易出错.
这是硬币兑换问题的一个版本。因此,这是一个动态规划问题。
我知道如何确定您是否可以找零,如果您最多可以使用每种面额的一枚硬币,或者您最多可以使用 k 枚硬币,但不能同时使用两者。
我无法理解其中一个Leetcode问题.
给定一个正整数n,找到完全平方数的数量最少(例如,1,4,9,16,...),其总和为n.
例如,给定n = 12,返回3,因为12 = 4 + 4 + 4; 给定n = 13,返回2,因为13 = 4 + 9.
解:
int numSquares(int n) {
static vector<int> dp {0};
while (dp.size() <= n) {
int m = dp.size(), squares = INT_MAX;
for (int i=1; i*i<=m; ++i)
squares = min(squares, dp[m-i*i] + 1);
dp.push_back(squares);
}
return dp[n];
}
Run Code Online (Sandbox Code Playgroud)
我真的不明白发生了什么min(squares,dp[m-i*i]+1).你能解释一下吗?
谢谢.
我正在尝试使用值迭代(通过 pymdptoolbox)和 NumPy找到此图中指定的马尔可夫决策过程问题的最佳策略。但是 pymdptoolbox 说我的转换矩阵“不是随机的”。
是不是因为有 [0, 0, 0, 0] 的数组?有些转换是不可能的,比如从状态 1 到状态 3。如果不是用零,我如何表示这些不可能的转换?
我的代码:
import mdptoolbox
import numpy as np
transitions = np.array([
#action1
[
[0.2, 0.8, 0, 0], #s1
[0, 0, 0, 0], #s2
[0, 0, 0, 0], #s3
[0, 0, 0.9, 0.1] #s4
],
#action2
[
[0.2, 0, 0, 0.8], #s1
[0, 0.2, 0.8, 0], #s2
[0, 0, 0, 0], #s3
[0, 0, 0, 0] #s4
],
#action3
[
[0, 0, 0, 0], #s1
[0.8, …Run Code Online (Sandbox Code Playgroud) python markov-chains dynamic-programming stochastic mdptoolbox
我尝试编写一个函数来计算 R 中的第 n 个斐波那契数。我可以递归地执行此操作。
fibonacci = function(n){
if (n == 1) {return(1)}
if (n == 2) {return(2)}
return(fibonacci(n - 1) + fibonacci(n - 2))
}
Run Code Online (Sandbox Code Playgroud)
我在 R 中找不到任何示例,但是从其他语言的指南中我想出了以下内容。然而,它似乎并没有运行得更快。
fibonacci = function(n, lookup = NULL){
if (is.null(lookup)) {
lookup = integer(n + 1)
}
if (n == 1) {return(1)}
if (n == 2) {return(2)}
lookup[1] = 1
lookup[2] = 2
if (lookup[n - 1] == 0) {
lookup[n - 1] = fibonacci(n - 1, lookup)
}
if (lookup[n - 2] …Run Code Online (Sandbox Code Playgroud) 问题是输出是否可以从给定点移动(a,b)到目标(c,d)
我们仅限于积极的座标
可能有以下两个动作
(a,b) -> (a+b,b)
(a,b) -> (a,b+a)
Run Code Online (Sandbox Code Playgroud)
例如,(1,1)to (5,4)is True
您可以执行以下操作:使用2nd move 3次,(1,1) -> (1,2) -> (1,3) -> (1,4)使用1st move 1次,(1,4) -> (5,4)
我想出了以下递归方法
def move(a,b,c,d):
if a==c and b==d:
return True
elif a>c or b>d:
return False
else:
ans = False
if a < c:
if move(a+b,b,c,d):
return True
if b < d:
if move(a,b+a,c,d):
return True
return False
Run Code Online (Sandbox Code Playgroud)
a)我的解决方案是否涵盖所有可能的情况?由于我没有测试用例,因此无法确定,但是我认为我确实考虑了所有因素。
b)我的解决方案的时间复杂度是多少?我认为它是指数的,但不能确定。
c)是否有更好的解决方案(在时间复杂度方面)。我们可以使用动态编程吗?
感谢您的投入。
我正在尝试解决这个问题:https : //www.urionlinejudge.com.br/judge/en/problems/view/1312
XYZ 电视频道正在开发一个新的游戏节目,参赛者必须做出一些选择才能获得奖品。游戏由一堆三角形的球组成,每个球都有一个整数值,如下例所示。
参赛者必须选择他要拿的球,他的奖金是这些球价值的总和。但是,只有当参赛者也直接将球拿在它上面时,他才能拿走任何给定的球。这可能需要使用相同的规则来获取额外的球。请注意,参赛者可以选择不拿任何球,在这种情况下,奖品为零。
电视节目导演关心参赛者可以为给定的筹码获得的最高奖金。由于他是你的老板,他不知道如何回答这个问题,所以他把这个任务交给了你。
输入
每个测试用例都使用多行描述。第一行包含一个整数N,表示堆栈的行数(1 ? N ? 1000)。接下来N行的第i 个包含i 个整数B ij (?105 ? B ij ? 105 for 1 ? j ? i ? N );数字B ij是堆栈中第i 行中第j 个球的值(第一行是最上面的一个,如果最左边的是每行内的第一个球)。
最后一个测试用例后面跟着一行包含一个零。
输出
Run Code Online (Sandbox Code Playgroud)Sample Input | Sample Output 4 | 7 3 | 0 -5 3 | 6 -8 2 -8 | 3 9 -2 7 | 2 | -2 | …
algorithm ×6
recursion ×3
math ×2
arrays ×1
c# ×1
c++ ×1
coin-change ×1
fibonacci ×1
linq ×1
mdptoolbox ×1
puzzle ×1
python ×1
r ×1
stochastic ×1