C ++
 Computer >> コンピューター >  >> プログラミング >> C ++

C++でスティックを接続するための最小コスト


正の整数の長さのスティックがあるとします。 X + Yのコストを支払うことで、長さXとYの任意の2本のスティックを1本のスティックに接続できます。これは、残りのスティックが1本になるまで実行されます。この方法で、指定されたすべてのスティックを1つのスティックに接続するための最小コストを見つける必要があります。したがって、スタックが[2,4,3]の場合、出力は14になります。

これを解決するには、次の手順に従います-

  • 最大ヒープ優先度キューpqを定義します
  • sのすべての要素をpqに挿入します
  • ans:=0
  • pqには複数の要素があります
    • temp:=キューの先頭、pqから先頭を削除
    • temp:=temp + pqの最上位要素、およびpqから削除
    • ans:=ans + temp
    • tempを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

  1. C++でボードを正方形にカットするための最小コスト

    コンセプト 長さp、幅qのボードが与えられたとすると、破壊のコストが最小になるように、このボードをp*qの正方形に分割する必要があります。このボードでは、各エッジの切削コストが示されます。一言で言えば、コストが最小になるように、このような一連の切断を選択する必要があります。 例 上記のボードに関して、正方形にカットする最適な方法は-です。 上記の場合の合計最小コストは65です。これは、次の手順を実行して計算され、評価されます。 Initial Value : Total_cost = 0 Total_cost = Total_cost + edge_cost * total_pi

  2. C++でのジョブスケジュールの最小難易度

    タスクのリストをd日でスケジュールするとします。タスクは依存しているため、i番目のタスクで作業するには、すべてのタスクjを完了する必要があります。ここで0 <=j