Computer >> 컴퓨터 >  >> 프로그램 작성 >> C++

C++에서 두 문자열을 동일하게 만드는 최소 비용

<시간/>

두 개의 문자열 A와 B와 CostA 및 CostB와 같은 두 개의 비용 값이 있다고 가정합니다. A와 B를 동일하게 만들기 위한 최소 비용을 찾아야 합니다. 문자열에서 문자를 삭제할 수 있고 문자열 A에서 삭제하는 비용은 CostA이고 문자열 B에서 삭제하는 데 드는 비용은 CostB입니다. 문자열에서 모든 문자를 제거하는 비용은 동일합니다. 문자열 A ="wxyz", B ="wyzx", CostA는 10, CostB는 20이라고 가정합니다. 따라서 출력은 30이 됩니다. 두 문자열에서 x를 삭제하면 A와 B는 동일합니다. 따라서 비용은 10 + 20 =30입니다.

이것은 Longest Common Subsequence 문제의 변형 중 하나입니다. A와 B에서 LCS의 길이를 찾은 다음 A와 B에서 LCS 길이를 빼야 제거할 문자 수를 얻을 수 있습니다.

예시

#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";
}

출력

Can be represented