C++でスティックを接続するための最小コスト
これを解決するには、次の手順に従います-
- 最大ヒープ優先度キューpqを定義します
- sのすべての要素をpqに挿入します
- ans:=0
- pqには複数の要素があります
- temp:=キューの先頭、pqから先頭を削除
- temp:=temp + pqの最上位要素、およびpqから削除
- ans:=ans + temp
- tempをpqに挿入
- 回答を返す
理解を深めるために、次の実装を見てみましょう-
#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
-
C++でボードを正方形にカットするための最小コスト
コンセプト 長さp、幅qのボードが与えられたとすると、破壊のコストが最小になるように、このボードをp*qの正方形に分割する必要があります。このボードでは、各エッジの切削コストが示されます。一言で言えば、コストが最小になるように、このような一連の切断を選択する必要があります。 例 上記のボードに関して、正方形にカットする最適な方法は-です。 上記の場合の合計最小コストは65です。これは、次の手順を実行して計算され、評価されます。 Initial Value : Total_cost = 0 Total_cost = Total_cost + edge_cost * total_pi
-
C++でのジョブスケジュールの最小難易度
タスクのリストをd日でスケジュールするとします。タスクは依存しているため、i番目のタスクで作業するには、すべてのタスクjを完了する必要があります。ここで0 <=j