Computer >> Máy Tính >  >> Lập trình >> C ++

Chi phí tối thiểu để tạo hai chuỗi giống nhau trong C ++

Giả sử chúng ta có hai chuỗi A và B, và hai giá trị chi phí khác như CostA và CostB. Chúng ta phải tìm chi phí tối thiểu để làm cho A và B giống hệt nhau. Chúng ta có thể xóa các ký tự khỏi chuỗi, chi phí để xóa khỏi chuỗi A là CostA và chi phí để xóa khỏi chuỗi B là CostB. Chi phí xóa tất cả các ký tự khỏi một chuỗi là như nhau. Giả sử chuỗi A =“wxyz”, B =“wyzx”, CostA là 10 và CostB là 20. Vì vậy, đầu ra sẽ là 30. Nếu chúng ta xóa x khỏi cả hai chuỗi, thì A và B sẽ giống hệt nhau. Vậy chi phí là 10 + 20 =30.

Đây là một trong những biến thể của bài toán Trình tự con chung dài nhất. Chúng ta phải tìm độ dài LCS từ A và B, sau đó trừ độ dài LCS cho A và B, do đó chúng ta có thể nhận được số ký tự cần xóa.

Ví dụ

#include <iostream>
using namespace std;
bool isRepresentedInDDigits(int num, int d, int base) {
   if (d==1 && num < base)
      return true;
   if (d > 1 && num >= base)
      return isRepresentedInDDigits(num/base, --d, base);
      return false;
}
bool checkNumber(int num, int d) {
   // Check for all bases one by one
   for (int base=2; base<=32; base++)
   if (isRepresentedInDDigits(num, d, base))
   return true;
   return false;
}
int main() {
   int num = 8;
   int dig = 2;
   if(checkNumber(num, dig))
      cout << "Can be represented";
   else
      cout << "Can not be represented";
}

Đầu ra

Can be represented