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

โปรแกรมหาผลรวมค่าใช้จ่าย (Cost) ของกราฟแบบไม่มีทิศทาง ทุกกรณีที่เป็นไปได้ ใน Python

กำหนดกราฟไม่มีทิศทาง G มี n โหนด ค่าใช้จ่ายของกราฟ = ผลรวมค่าใช้จ่ายโหนด ค่าใช้จ่ายโหนด = D^k โดย D คือ degree กำหนด n และ k หาผลรวมค่าใช้จ่ายของกราฟแบบไม่มีทิศทาง ทุกกรณีที่เป็นไปได้ mod 1005060097

เช่น n=3, k=2 ผลลัพธ์ 36 เพราะมี 8 กราฟ: - 1 กราฟ 3 ขอบ cost=12 - 3 กราฟ 2 ขอบ cost=6 แต่ละอัน - 3 กราฟ 1 ขอบ cost=2 แต่ละอัน - 1 กราฟ 0 ขอบ cost=0 รวม = 12*1 + 6*3 + 2*3 + 0*1 = 36

วิธีแก้ปัญหา

  • ฟังก์ชัน choose(n, k) คำนวณ binomial coefficient
  • ฟังก์ชัน util(d, n) = choose(n-1, d) * 2^(choose(n-1, 2))
  • total := 0
  • ลูป d จาก 0 ถึง n-1
    • total := total + util(d, n) * d^k
    • total := total mod 1005060097
  • คืนค่า (total * n) mod 1005060097

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

def choose(n, k):
    product = 1
    for i in range(n, n-k, -1):
        product *= i
    for i in range(1, k+1):
        product /= i
    return int(product)

def util(d, n):
    return choose(n-1, d) * 2 ** (choose(n-1, 2))

def solve(n, k):
    total = 0
    for d in range(n):
        total += util(d, n) * d ** k
        total %= 1005060097
    return (total * n) % 1005060097

n = 3
k = 2
print(solve(n, k))

Input

3, 2

Output

36