Computer >> บทช่วยสอนคอมพิวเตอร์ >  >> การเขียนโปรแกรม >> Python

ตรวจสอบว่าทำ Sum ที่กำหนดได้จาก Set ของ Elements (ใช้ซ้ำได้) หรือไม่ด้วย Python


มี Array nums และค่า Sum ต้องเช็คว่าบวก Element ใน nums (ใช้ซ้ำได้) ได้ Sum หรือไม่

เช่น Input nums = [2, 3, 5], sum = 28 Output True (5*5 + 3*1 = 28? Wait 5*5=25+3=28)

ขั้นตอนแก้ (Unbounded Knapsack / Coin Change DP):

  • DP Table ขนาด MAX (1000) เก็บว่าทำ Sum ได้หรือไม่
  • DP[0] = True
  • สำหรับแต่ละ Coin: Update DP[j+coin] = True ถ้า DP[j] = True

ตัวอย่างโค้ด

MAX = 1000
table = [0] * MAX

def util(nums):
    table[0] = 1
    nums.sort()
    for i in range(len(nums)):
        val = nums[i]
        if table[val]:
            continue
        for j in range(MAX - val):
            if table[j]:
                table[j + val] = 1

def solve(nums, sum):
    util(nums)
    if table[sum]:
        return True
    return False

nums = [2, 3, 5]
sum = 28
print(solve(nums, sum))

Input

[2, 3, 5], 28

Output

True