मान लीजिए कि हमारे पास एक सरणी T में पाँच संख्याएँ हैं। पाँच कार्ड हैं और प्रत्येक कार्ड पर एक संख्या लिखी हुई है। ith कार्ड पर T[i] लिखा होता है। हम कुछ कार्डों को त्याग सकते हैं और हमारा लक्ष्य शेष संख्याओं पर लिखी गई संख्याओं के योग को कम करना है। उसे एक ही नंबर वाले दो या तीन कार्डों को एक बार छोड़ने की अनुमति है। यदि समान संख्या वाले दो या तीन कार्ड चुनना असंभव है, तो हम कार्ड नहीं छोड़ेंगे। हमें न्यूनतम संभव राशि ज्ञात करनी होगी।
इसलिए, यदि इनपुट टी =[7, 3, 7, 3, 20] जैसा है, तो आउटपुट 26 होगा, क्योंकि संख्या 7 के साथ दो कार्डों को हटाने से शेष राशि 3 + 3 + 20 =26 होगी।
कदम
इसे हल करने के लिए, हम इन चरणों का पालन करेंगे -
n := 5 m := 0 Define an array k of size: 101 and fill with 0 for initialize i := 0, when i < n, update (increase i by 1), do: a := T[i] m := m + a (increase k[a] by 1) M := m for initialize i := 0, when i < 101, update (increase i by 1), do: if k[i] > 1, then: M := minimum of M and (m - i * (minimum of 3 and k[i])) return M
उदाहरण
आइए बेहतर समझ पाने के लिए निम्नलिखित कार्यान्वयन देखें -
#include <bits/stdc++.h> using namespace std; int solve(vector<int> T) { int n = 5, m = 0, a; int k[101] = { 0 }; for (int i = 0; i < n; i++) { int a = T[i]; m += a; k[a]++; } int M = m; for (int i = 0; i < 101; i++) if (k[i] > 1) { M = min(M, m - i * (min(3, k[i]))); } return M; } int main() { vector<int> T = { 7, 3, 7, 3, 20 }; cout << solve(T) << endl; }
इनपुट
{ 7, 3, 7, 3, 20 }
आउटपुट
26