最小变更制造者返回最优解并且没有解决方案

时间:2018-03-14 05:56:25

标签: lua dynamic-programming

我需要帮助在我的Change Maker中添加一个if子句,这样如果我说硬币的面额不能等于输入的硬币值。 例如,我的硬币值为2,4,6,我的值为1. 我希望它返回不可能改变我尝试在下面添加一个子句但是当我测试它时,我得到 1.#INF 我也很好奇如何找到最佳的硬币解决方案,所以除了最小硬币数量之外,如果有硬币,它会返回最佳硬币设置。

function ChangeMaking(D,n)
--[[
//Applies dynamic programming to find the minimum number of coins
//of denominations d1< d2 < . . . < dm where d1 = 1 that add up to a
//given amount n
//Input: Positive integer n and array D[1..m] of increasing positive
// integers indicating the coin denominations where D[1]= 1
//Output: The minimum number of coins that add up to n
]]
  F = {} -- F is List Array of Coins
  m = tablelength(D)
  F[0] = 0
  for i =1,n do 
    temp = math.huge
    j = 1
  while j <= m and i >= D[j] do
    temp = math.min(F[ i - D[j] ], temp)
    j = j + 1
  end
  F[i] = temp + 1
  end
  --I wanted to Catch the failed Solution here but I return 1.#INF instead 
  --if F[n] <= 0 and F[n] == 1.#INF then print("No Change Possible") return end
  return F[n]
end

function main()

--[[
//Prints a Greeting, Asks for Denominations separated by spaces.
// Iterates through the input and assigns values to table
// Table is then input into ChangeMaker, and a while loop takes an n value for user input.
// User Enters 0 to end the Loop
]]

  io.write("Hello Welcome the to Change Maker - LUA Edition\nEnter a series of change denominations, separated by spaces: ")
  input = io.read()
  deno = {}
  for num in input:gmatch("%d+") do table.insert(deno,tonumber(num)) end
  local i = 1
  while i ~= 0 do
    io.write("Please Enter Total for Change Maker, When Finished Enter 0 to Exit: ")
    input2 = io.read("*n")
    if input2 ~= 0 then io.write("\nMinimum # of Coins: " .. ChangeMaking(deno,input2).."\n") end
    if input2 == 0 then i=0 print("0 Entered, Exiting Change Maker") end
  end
end
function tablelength(T)
--[[
//Function for grabbing the total length of a table.
]]
  local count = 0
  for _ in pairs(T) do count = count + 1 end
  return count
end

main()

0 个答案:

没有答案
相关问题