ধরুন 2N ব্যক্তি আছে। একটি কোম্পানি একটি সাক্ষাৎকারের আয়োজন করতে চায়। I-তম ব্যক্তিকে শহর A তে যাওয়ার জন্য খরচ হল খরচ[i][0], এবং I-তম ব্যক্তিকে শহর B তে যাওয়ার খরচ হল খরচ[i][1]। প্রতিটি মানুষকে একটি শহরে যাওয়ার জন্য আমাদের ন্যূনতম খরচ খুঁজে বের করতে হবে, যেমন এন লোকেরা প্রতিটি শহরে আসে। সুতরাং যদি প্রদত্ত তালিকাটি [[10, 20], [30, 200], [400, 50], [30, 20]] হয় তাহলে আউটপুট হবে 110। তাই আমরা ব্যক্তি P1 কে 10 খরচ সহ শহর A-তে পাঠাব। , শহরের A থেকে দ্বিতীয় ব্যক্তি 30 টাকা, তৃতীয় এবং চতুর্থ ব্যক্তিকে শহরের B থেকে যথাক্রমে 50 এবং 20 খরচ।
এটি সমাধান করতে, আমরা এই পদক্ষেপগুলি অনুসরণ করব -
- n :=অ্যারের আকার
- a :=n / 2 এবং b :=n / 2
- অ্যারে সাজান, এবং উত্তর দিন :=0
- এর জন্য i :=0 থেকে n – 1 −
- যদি b =0 এবং অ্যারে[i, 0] <=array[i, 1] এবং a> 0 হয়, তাহলে
- a 1 কমিয়ে দিন
- উত্তর :=ans + অ্যারে[i, 0]
- অন্যথায়
- b 1 দ্বারা হ্রাস করুন
- উত্তর :=ans + অ্যারে[i, 1]
- যদি b =0 এবং অ্যারে[i, 0] <=array[i, 1] এবং a> 0 হয়, তাহলে
- উত্তর ফেরত দিন
উদাহরণ
আরো ভালোভাবে বোঝার জন্য আসুন নিচের বাস্তবায়ন দেখি -
#include <bits/stdc++.h> using namespace std; class Solution { public: static bool cmp(vector <int> a, vector <int> b){ return abs(a[0] - a[1]) > abs(b[0] - b[1]); } int twoCitySchedCost(vector<vector<int>>& costs) { int n = costs.size(); int a = n/2; int b = n/2; sort(costs.begin(), costs.end(), cmp); int ans = 0; for(int i = 0; i < n; i++){ if(b == 0 || (costs[i][0] <= costs[i][1] && a > 0)){ a--; //cout << a << " " << costs[i][0] << endl; ans += costs[i][0]; } else { //cout << costs[i][1] << endl; b--; ans += costs[i][1]; } } return ans; } }; main(){ Solution ob; vector<vector<int>> c = {{10,20},{30,200},{400,50},{30,20}}; cout << ob.twoCitySchedCost(c); }
ইনপুট
[[10,20],[30,200],[400,50],[30,20]]
আউটপুট
110