使两个字符串在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。
这是最长公共子序列问题的变体之一。我们必须从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) {
//一一检查所有基地
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 << "可以表示";
else
cout << "无法代表";
}输出结果
可以表示
热门推荐
10 医院探望朋友祝福语简短
11 毕业祝福语简短女朋友
12 春节虎年爸妈祝福语简短
13 儿童毕业祝福语 简短6
14 开工仪式横幅祝福语简短
15 孩子日常祝福语大全简短
16 清晨寄语诗句祝福语简短
17 结婚送亲认亲祝福语简短
18 虎年喝酒拜年祝福语简短