Computer >> คอมพิวเตอร์ >  >> การเขียนโปรแกรม >> C++

ต้นทุนขั้นต่ำในการเชื่อมต่อ Sticks ใน C++


สมมติว่าเรามีแท่งไม้ที่มีความยาวจำนวนเต็มบวก เราสามารถเชื่อมไม้ที่มีความยาว X และ Y สองแท่งเข้าด้วยกันเป็นแท่งเดียวโดยจ่ายราคา X + Y การดำเนินการนี้จะดำเนินการจนกว่าจะเหลือแท่งเดียว เราต้องหาต้นทุนขั้นต่ำในการเชื่อมต่อแท่งที่ให้มาทั้งหมดเป็นแท่งเดียวด้วยวิธีนี้ ดังนั้นหากสแต็กเป็น [2,4,3] ผลลัพธ์จะเป็น 14

เพื่อแก้ปัญหานี้ เราจะทำตามขั้นตอนเหล่านี้ -

  • กำหนด pq คิวลำดับความสำคัญสูงสุดของฮีป
  • แทรกองค์ประกอบทั้งหมดของ s ลงใน pq
  • ตอบ :=0
  • ในขณะที่ pq มีมากกว่าหนึ่งองค์ประกอบ
    • temp :=ด้านบนของคิว ลบ top จาก pq
    • temp :=temp + องค์ประกอบด้านบนของ pq และลบออกจาก pq
    • ans :=ans + อุณหภูมิ
    • ใส่อุณหภูมิลงใน pq
  • คืนสินค้า

ตัวอย่าง(C++)

ให้เราดูการใช้งานต่อไปนี้เพื่อทำความเข้าใจ −

#include <bits/stdc++.h>
using namespace std;
class Solution {
public:
   int connectSticks(vector<int>& s) {
      priority_queue <int, vector<int>, greater<int> > pq;
      for(int i =0;i<s.size();i++)pq.push(s[i]);
      int ans = 0;
      while(pq.size()>1){
         int temp = pq.top();
         pq.pop();
         temp += pq.top();
         pq.pop();
         ans+=temp;
         pq.push(temp);
      }
      return ans;
   }
};
main(){
   vector<int> v = {2,4,3};
   Solution ob;
   cout <<ob.connectSticks(v);
}

อินพุต

[2,4,3]

ผลลัพธ์

14