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