最大kルピーで購入できるチョコレートの最大数を見つけるためのC++プログラム
n個の要素を持つ配列Aがあり、他の値l、r、およびkがそこにあるとします。アマルはチョコレートを買いたいと思っています。彼は高すぎるチョコレートや安すぎるチョコレートも買わないでしょう。店内にはn種類のチョコレートバーがあり、価格はAで表されています。チョコレートバーは、価格がrより大きい場合は高すぎ、l未満の場合は安すぎます。彼はせいぜいkルピーを使いたいと思っています。彼が購入できるチョコレートの最大量を見つける必要があります。
したがって、入力がA =[1、2、3、4、5、6]のような場合; l =3; r =5; k =10の場合、出力は2になります。これは、3ルピーと4ルピーのチョコレートを7ルピーで購入できるためです。
ステップ
これを解決するには、次の手順に従います-
n := size of A ans := 0 sort the array A for initialize i := 0, when i < n, update (increase i by 1), do: if A[i] > k, then: Come out from the loop if A[i] >= l and A[i] <= r, then: k := k - A[i] (increase ans by 1) return ans
例
理解を深めるために、次の実装を見てみましょう-
#include <bits/stdc++.h> using namespace std; int solve(vector<int> A, int l, int r, int k) { int n = A.size(); int ans = 0; sort(A.begin(), A.end()); for (int i = 0; i < n; ++i) { if (A[i] > k) break; if (A[i] >= l && A[i] <= r) { k -= A[i]; ++ans; } } return ans; } int main() { vector<int> A = { 1, 2, 3, 4, 5, 6 }; int l = 3; int r = 5; int k = 10; cout << solve(A, l, r, k) << endl; }
入力
{ 1, 2, 3, 4, 5, 6 }, 3, 5, 10
出力
2
-
グラフから減らすことができるスコアの最大量を見つけるためのC++プログラム
n個の頂点とm個のエッジを持つ重み付きの無向グラフがあるとします。グラフのスコアは、グラフ内のすべてのエッジの重みの加算として定義されます。エッジの重みは負の値になる可能性があり、それらを削除するとグラフのスコアが増加します。グラフを接続したまま、グラフからエッジを削除して、グラフのスコアを最小にする必要があります。減らすことができるスコアの最大量を見つける必要があります。 グラフは配列edgesで与えられ、各要素は{weight、{vertex1、vertex2}}の形式です。 したがって、入力がn =5、m =6、edges ={{2、{1、2}}、{2、{1、3}}、{1、{2、3}
-
Pythonで階段を上る方法(最大k回までの最大ステップ数)を見つけるためのプログラム
n段の階段があり、別の番号kもあるとします。最初は階段0にあり、一度に1、2、または3段の階段を上ることができます。しかし、私たちはせいぜいk回しか3つの階段を上ることができません。次に、階段を上る方法をいくつか見つける必要があります。 したがって、入力がn =5、k =2の場合、階段を上るにはさまざまな方法があるため、出力は13になります- [1、1、1、1、1] [2、1、1、1] [1、2、1、1] [1、1、2、1] [1、1、1、2] [1、2、2] [2、1、2] [2、2、1] [1、1、3] [1、3、1] [3、1、1] [2