给定一组数,找出任意数适合的最小倍数和
> < li>
找出给定数字能与最小余数相适应的倍数组合
找到一个数字可以四舍五入到的最小“总和”
每个组合中使用的实际数字本身对于这个特定的挑战并不重要
目标是找到最小的“总和”(精确的或四舍五入的总和);然而,我很乐意探索/了解其他因素
试衣盒数量计算算法
其他人说子集和问题的变体
mod
i.可能不需要此步骤,具体取决于组合如何构建在一起/单独构建认为这个或其他明显的python示例可能有数学解决方案
https://www.geeksforgeeks.org/find-smallest-range-containing-elements-from-k-lists/
其总和是特定阈值上的最小总和的子集——我认为这个动态规划非常类似于这里的挑战;然而,对于如何以一种实用的方式逐步组合/倍增(记忆)所有元素的潜在组合,我遇到了一点障碍。
递归向后减法在这类问题中有效吗?
[1,4,4.5]
;最小和=5
(41)[1,4,4.5]
;最小和=5.5
(4.51)[20,40,9001]
;最小总和=100
(40 40 20或20 20 20 20,等等)[20,40,9001]
;最小总和=160
用任意数字设置[20,40,9001]
;最小总和=9000
(我想是40*225等)
用任意数字设置[20,40,9001]
9001;最小和=9001
用任意数字设置[20,40,9001]
1800218002
(9001 9001)
用任意数字设置[100,300,420]
101200
(100 100)
用任意数字设置[100,300,420]
398.001400
(300 100)
用任意数字设置[100,300,420]
;最小和=<代码>420
(420)
感谢您提供您可以帮助的任何其他上下文、指针或简单的伪代码解决方案。
我根本没有考虑过效率问题,但一个简单的实现似乎很容易编写:
const {ceil, min} = Math;
const range = (lo, hi) => [... Array (hi - lo + 1)] .map ((_, i) => i + lo);
const minMult = ([n, ...ns], t) =>
ns .length == 0
? n * ceil (t / n)
: min ( ...range (0, ceil (t / n)) .map (k => k * n + minMult (ns, t - k * n)));
[
[[1, 4, 4.5], 5],
[[1, 4, 4.5], 5.1],
[[20, 40, 9001], 88],
[[20, 40, 9001], 145],
[[20, 40, 9001], 9000],
[[20, 40, 9001], 9001],
[[20, 40, 9001], 18002],
[[100, 300, 420], 101],
[[100, 300, 420], 398.001],
[[100, 300, 420], 404]
] .forEach (
([ns, t]) => console .log (`minMult ([${ns.join(', ')}], ${t}) //=> ${minMult(ns, t)}`)
)
.as-console-wrapper {max-height: 100% !important; top: 0}
这可能不是算法本身,但您可以使用混合整数规划来解决此问题。下面是在蟒蛇中使用 PuLP
的示例:
import pulp
def solve(lst, target):
# define a minimization problem
prob = pulp.LpProblem("CombProb", pulp.LpMinimize)
# vars[i] counts the number of time lst[i] is used in an optimal solution
vars = pulp.LpVariable.dicts("count", range(len(lst)), lowBound=0, cat="Integer")
# define the objective
prob += sum(vars[i] * lst[i] for i in range(len(lst)))
# define the constraint
prob += sum(vars[i] * lst[i] for i in range(len(lst))) >= target
# solve the problem and check termination status
assert prob.solve() == 1
# return the objective value and involved list elements
return prob.objective.value(), {lst[i]: vars[i].varValue for i in range(len(lst))}
tests = [
# (lst, target, solution)
([1, 4, 4.5], 5, 5),
([1, 4, 4.5], 5.1, 5.5),
([20, 40, 9001], 88, 100),
([20, 40, 9001], 145, 100),
([20, 40, 9001], 9000, 9000),
([20, 40, 9001], 9001, 9001),
([20, 40, 9001], 18002, 18002),
([100, 300, 420], 101, 200),
([100, 300, 420], 398.001, 400),
([100, 300, 420], 404, 420),
]
for i, (lst, target, sol) in enumerate(tests, start=1):
res = solve(lst, target)[0]
if res == sol:
continue
else:
print(f"Error in case {i} with expected solution {sol} and computed solution {res}")
在测试用例4中似乎有一个错误,但是其他测试用例通过了。
例1:输入:nums=[3,4,2]输出:6解释:删除4以获得4点,因此3也被删除。然后,删除2个赚取2分。共获得6分。 以下是如何解决它的解释: 算法 我无法理解这里是如何使用和变量的,以及它是如何解决问题语句的。 你能帮我理解这一点吗。
问题内容: 我在计算本月下一个最后一天何时发送预定的通知时遇到问题。 这是我的代码: 这是导致问题的线,我相信: 如何使用日历正确设置下个月的通知的最后一天? 问题答案: 这将返回当前月份的实际最大值。例如,现在是leap年的2月,因此它返回29作为。
本文向大家介绍php计算一个文件大小的方法,包括了php计算一个文件大小的方法的使用技巧和注意事项,需要的朋友参考一下 本文实例讲述了php计算一个文件大小的方法。分享给大家供大家参考。具体如下: 希望本文所述对大家的php程序设计有所帮助。
我在网上遇到了这个问题。 给定一个整数:N和一个数组int arr[],您必须向数组中添加一些元素,以便可以使用(添加)数组中的元素从1生成到N。 请记住,在生成某个x(1)时,只能使用数组中的每个元素一次 有人能给点提示吗?
我有一个多边形类型的几何体,我正在计算一个点的最小距离可能在多边形几何体内部(由360个点组成,作为闭合几何体)或多边形几何体外部。使用postgis的ST_distance方法,当点在几何体外部时,我得到精确的距离,但如果点在几何体内部,则得到0作为距离,我想要与多边形几何体最近点的点之间的最小距离,无论该点位于几何体内部还是外部。
问题陈述: 我需要得到一个给定数字的最佳面额组合。例如:我有三种面额,给定的数字是30,那么列表应该返回