Computer >> कंप्यूटर ट्यूटोरियल >  >> प्रोग्रामिंग >> Python

पायथन में बोर्ड को वर्गों में काटने की न्यूनतम लागत


मान लीजिए हमारे पास लंबाई p और चौड़ाई q का एक बोर्ड है। हमें इस बोर्ड को p*q वर्गों में तोड़ना है ताकि तोड़ने की लागत न्यूनतम हो। प्रत्येक किनारे के लिए काटने की लागत दी गई है।

इसलिए, यदि इनपुट X_slice = [3,2,4,2,5], Y_slice = [5,2,3] है,

पायथन में बोर्ड को वर्गों में काटने की न्यूनतम लागत

तो आउटपुट 65 होगा।

समाधान दृष्टिकोण

इसे हल करने के लिए हम निम्न चरणों का पालन करेंगे:

  • res := 0
  • horizontal := 1, vertical := 1
  • i := 0, j := 0
  • जब तक i < m और j < n:
    • यदि X_slice[i] > Y_slice[j]:
      • res := res + X_slice[i] * vertical
      • horizontal := horizontal + 1
      • i := i + 1
    • अन्यथा:
      • res := res + Y_slice[j] * horizontal
      • vertical := vertical + 1
      • j := j + 1
  • total := 0
  • जब तक i < m:
    • total := total + X_slice[i]
    • i := i + 1
  • res := res + total * vertical
  • total := 0
  • जब तक j < n:
    • total := total + Y_slice[j]
    • j := j + 1
  • res := res + total * horizontal
  • res लौटाएं।

उदाहरण

बेहतर समझ के लिए निम्न कार्यान्वयन देखें:

def minCost(X_slice, Y_slice, m, n):
    res = 0
    X_slice.sort(reverse=True)
    Y_slice.sort(reverse=True)
    horizontal = 1
    vertical = 1
    i = 0
    j = 0
    while i < m and j < n:
        if X_slice[i] > Y_slice[j]:
            res += X_slice[i] * vertical
            horizontal += 1
            i += 1
        else:
            res += Y_slice[j] * horizontal
            vertical += 1
            j += 1
    total = 0
    while i < m:
        total += X_slice[i]
        i += 1
    res += total * vertical
    total = 0
    while j < n:
        total += Y_slice[j]
        j += 1
    res += total * horizontal
    return res

m = 6
n = 4
X_slice = [3, 2, 4, 2, 5]
Y_slice = [5, 2, 3]
print(minCost(X_slice, Y_slice, m - 1, n - 1))

इनपुट

[3,2,4,2,5], [5,2,3]

आउटपुट

65
  1. Python में सभी बिंदुओं को जोड़ने की न्यूनतम लागत खोजने का प्रोग्राम Python में सभी बिंदुओं को जोड़ने की न्यूनतम लागत खोजने का प्रोग्राम

    मान लीजिए हमारे पास points नामक एक ऐरे है जिसमें कुछ पॉइंट्स (x, y) के रूप में हैं। अब दो पॉइंट्स (xi, yi) और (xj, yj) को जोड़ने की लागत उनके बीच की मैनहट्टन दूरी है, सूत्र है |xi - xj| + |yi - yj|। हमें सभी पॉइंट्स को जोड़ने की न्यूनतम लागत ढूंढनी है। उदाहरण के लिए, यदि इनपुट है points = [(0,0),(

  1. पायथन में न्यूनतम लागत से शहरों को जोड़ना पायथन में न्यूनतम लागत से शहरों को जोड़ना

    मान लीजिए 1 से N तक नंबर वाले N शहर हैं। हमारे पास कनेक्शन्स हैं, जहां प्रत्येक कनेक्शन [i] [city1, city2, cost] है जो city1 और city2 को एक साथ जोड़ने की लागत दर्शाता है। हमें न्यूनतम लागत ढूंढनी है ताकि शहरों के प्रत्येक जोड़े के लिए, कनेक्शन्स का एक पथ मौजूद हो (संभवतः लंबाई 1 का) जो उन दो शहरों क

  1. पायथन में लीफ वैल्यूज से न्यूनतम लागत ट्री पायथन में लीफ वैल्यूज से न्यूनतम लागत ट्री

    मान लीजिए हमारे पास पॉजिटिव इंटीजर्स का एक ऐरे arr है, उन सभी बाइनरी ट्री पर विचार करें जैसे कि -प्रत्येक नोड के या तो 0 या 2 चिल्ड्रन हैं;arr ऐरे के मान इनऑर्डर ट्रैवर्सल में प्रत्येक लीफ के मानों से मेल खाते हैं।प्रत्येक नॉन-लीफ नोड का मान उसके बाएं और दाएं सबट्री में सबसे बड़े लीफ मान के गुणनफल क