すべてのタスクを実行するために必要な最小時間を見つけるためのC++コード
n個の要素を持つ配列Aと、他の2つの配列kとxがあるとします。 i番目のタスクは完了するのにA[i]時間かかります。与えられたAは、減少しない方法でソートされます。 Amalは最大でk個のタスクを実行し、A[i]ではなくx単位の時間で各タスクを実行します。 (x<すべてのA[i]の最小値)。アマルの仕事を完了するために必要な最小時間を見つけなければなりません。 Amalは同時に複数のタスクを実行することはできません。
したがって、入力がA =[3、6、7、10]のような場合; k =2; x =2の場合、出力は13になります。これは、3番目と4番目のタスクを実行し、A[2]とA[3]の代わりにそれぞれにx=2時間を費やすことが最善のオプションであるためです。その場合、答えは3 + 6 + 2 + 2=13です。
ステップ
これを解決するには、次の手順に従います-
x := k * x n := size of A for initialize i := 0, when i < n - k, update (increase i by 1), do: t := A[i] x := x + t return x
例
理解を深めるために、次の実装を見てみましょう-
#include <bits/stdc++.h> using namespace std; int solve(vector<int> A, int k, int x){ x = k * x; int n = A.size(); for (int i = 0; i < n - k; i++){ int t = A[i]; x += t; } return x; } int main(){ vector<int> A = { 3, 6, 7, 10 }; int k = 2; int x = 2; cout << solve(A, k, x) << endl; }
入力
{ 3, 6, 7, 10 }, 2, 2
出力
13
-
C++でツリー内のすべてのリンゴを収集するための最小時間
n個の頂点で構成される無向ツリーがあり、これらの番号が0からn-1で、頂点にいくつかのリンゴがあるとします。木の片方の端を歩くのに1秒かかります。頂点0から始まり、この頂点に戻るツリー内のすべてのリンゴを収集するために費やす必要のある最小時間を秒単位で見つける必要があります。 ここで、無向ツリーのエッジは配列のエッジで指定されます。ここで、edges [i] =[from_i、to_i]は、頂点from_iとto_iを接続するエッジが存在することを意味します。さらに、別の配列にリンゴがあります。hasApple[i] =trueは、頂点iにリンゴがあることを意味します。それ以外の場合は、リン
-
C++ですべての従業員に通知するために必要な時間
会社に、従業員ごとに一意のIDを持つn人の従業員がいるとします。これらのIDの範囲は0からn-1です。会社の責任者はheadIDを持つものです。各従業員には、manager配列で指定された1人の直属の上司がいます。ここで、manager [i]はi番目の従業員の直属の上司であり、manager [headID]=-1です。また、従属関係がツリーのような構造になることが保証されています。ここで、会社の責任者は、会社のすべての従業員に緊急のニュースを通知したいと考えています。彼は直属の部下に通知することができ、すべての従業員が緊急のニュースを知るまで、部下などに通知します。 i番目の従業員は、すべ