Computer >> कंप्यूटर >  >> प्रोग्रामिंग >> C++

C++ में दो न्यूमेरिक स्ट्रिंग्स को एक समान बनाने की न्यूनतम लागत

मान लीजिए कि हमारे पास दो अंकीय तार ए और बी हैं। हमें ए और बी को समान बनाने के लिए न्यूनतम लागत का पता लगाना है। हम केवल एक ही ऑपरेशन कर सकते हैं, यानी हम स्ट्रिंग से अंकों को हटा सकते हैं, संख्या से एक अंक को हटाने की लागत अंकों के मूल्य के समान है। मान लीजिए कि स्ट्रिंग A ="6789", B ="7859", तो हमें A से 6 हटाना है, और B से 5 हटाना है, इसलिए लागत 5 + 6 =11 होगी।

यह सबसे लंबी सामान्य बाद की समस्या की भिन्नता में से एक है। हमें A और B से LCS की लंबाई ज्ञात करनी है, इस सूत्र का उपयोग करके हम न्यूनतम लागत प्राप्त कर सकते हैं।

न्यूनतम लागत=कॉस्टए+कॉस्टबी-2∗lcs<उप>लागत

उदाहरण

#include <iostream>
using namespace std;
int longest_common_subsequence(int dp[101][101], string a, string b, int a_len,
int b_len) {
   for (int i = 0; i < 100; i++)
   for (int j = 0; j < 100; j++)
   dp[i][j] = -1;
   if (a_len < 0 || b_len < 0) {
      return 0;
   }
   if (dp[a_len][b_len] != -1)
   return dp[a_len][b_len];
   int res = 0;
   if (a[a_len] == b[b_len]) {
      res = int(a[a_len] - 48) + longest_common_subsequence(dp, a, b, a_len - 1, b_len - 1);
   } else
      res = max(longest_common_subsequence(dp, a, b, a_len - 1, b_len),
      longest_common_subsequence(dp, a, b, a_len, b_len - 1));
      dp[a_len][b_len] = res;
      return res;
}
int minCost(string str) {
   int cost = 0;
   for (int i = 0; i < str.length(); i++)
   cost += int(str[i] - 48);
   return cost;
}
int main() {
   string a, b;
   a = "6789";
   b = "7859";
   int dp[101][101];
   cout << "Minimum Cost to make these two numbers identical: " << (minCost(a) + minCost(b) - 2 * longest_common_subsequence(dp, a, b, a.length() - 1, b.length() - 1));
   return 0;
}

आउटपुट

Minimum Cost to make these two numbers identical: 11

  1. C++ का उपयोग करके दो स्ट्रिंग्स को समान बनाने के लिए आवश्यक न्यूनतम संख्या में ऑपरेशन।

    समस्या कथन दो स्ट्रिंग्स str1 और str2 को देखते हुए, दोनों स्ट्रिंग्स में a और b अक्षर होते हैं। दोनों तार समान लंबाई के हैं। दोनों स्ट्रिंग्स में एक _ (रिक्त स्थान) है। कार्य निम्न कार्यों की न्यूनतम संख्या करके पहली स्ट्रिंग को दूसरी स्ट्रिंग में परिवर्तित करना है - यदि _ स्थिति I पर है तो _ को

  1. C++ में दो स्ट्रिंग्स को समान बनाने के लिए न्यूनतम लागत

    मान लीजिए कि हमारे पास दो तार A और B हैं, और अन्य दो लागत मान जैसे CostA, और CostB हैं। हमें A और B को समान बनाने के लिए न्यूनतम लागत ज्ञात करनी होगी। हम स्ट्रिंग से वर्णों को हटा सकते हैं, स्ट्रिंग A से हटाने की लागत CostA है, और स्ट्रिंग B से हटाने की लागत CostB है। एक स्ट्रिंग से सभी वर्णों को हट

  1. C++ में कैरेक्टर को हटाए बिना दो स्ट्रिंग्स एनाग्राम बनाने के लिए आवश्यक न्यूनतम जोड़तोड़

    मान लीजिए कि हमारे पास समान लंबाई के दो तार हैं, हमें किसी भी वर्ण को हटाए बिना दो स्ट्रिंग विपर्यय बनाने के लिए आवश्यक न्यूनतम संख्या में परिवर्तन करना होगा। विपर्यय दो तार होते हैं जिनमें वर्णों का एक ही सेट होता है। मान लीजिए कि दो स्ट्रिंग हैलो हैं, और वर्ल्ड यहां आवश्यक परिवर्तनों की संख्या 3 ह