本文實例講述了C++動態規劃之最長公子序列解決方法。分享給大家供大家參考。具體分析如下:
問題描述:
求出兩個字符串中的最長公子序列的長度。
輸入:
csblog
belong
輸出:
max length = 4
實現代碼:
#include <stdio.h>#include <string.h>int arr[200][200];/* 表示str1的前i位和str2的前j位的最長公子序列的長度 */int main(){ char str1[100],str2[100]; /* 輸入數據 */ scanf("%s%s",str1,str2); int len1 = strlen(str1); int len2 = strlen(str2); /* 初始化數組 */ int i,j; for(i = 0 ; i <= len1 ; ++i) { for(j = 0 ; j <= len2 ; ++j) arr[i][j] = 0; } /* 計算 */ for(i = 1 ; i <= len1 ; ++i) { for(j = 1 ; j <= len2 ; ++j) { /* 字符相同,則最長公子序列長度加1 */ if(str1[i - 1] == str2[j - 1]) { arr[i][j] = arr[i - 1][j - 1] + 1; } else /* 當前字符不相同,則取上次選擇的最大值做為當前結果 */ { arr[i][j]=arr[i][j-1]>arr[i-1][j]?arr[i][j-1]:arr[i-1][j]; } } } /* 輸出結果 */ printf("max length = %d/n",arr[len1][len2]); return 0;}
希望本文所述對大家的C++程序設計有所幫助。
新聞熱點
疑難解答
圖片精選