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