動態規劃-優化編輯器問題
題目描述:
對於兩個字串A和B,我們需要進行插入、刪除和修改操作將A串變為B串。
定義ic,dc,rc分別為三種操作的代價,請設計一個高效演算法,求出將A串變為B串所需要的最少代價。
給定兩個字串A和B,及它們的長度和三種操作代價,請返回將A串變為B串所需要的最小代價。保證兩串長度均小於等於300.
求解過程:
生成大小為(N+1)*(M+1)的矩陣dp. dp[x][y]表示A前x個字串編輯成 B前y個字元所花費的代價. 對於第一行來說,dp[0][y]表示將一個空串變為B的前y個字元組成的子串,花費的代價為ic*y; 同理,對於第一列dp[x][0] = x*dc; 對於其他的位置,dp[x][y]可能有以下幾種取值: dp[x-1][y-1]+rc;//A[x-1]!=B[y-1] 將前x-1個字元變為B前y-1個字元,再將最後一個字元替換. dp[x-1][y-1];//A[x-1]==B[y-1] 將前x-1個字元變為B前y-1個字元,最後一個不用修改. dp[x-1][y]+dc;//刪除一個字元,將前x-1個字元變為B的前y個字元 dp[x][y-1]+ic;//將A前x-1個字元變為B的前y個字元,再插入一個字元 dp[x][y]的值就為以上四者最小的一個. 求解完畢,dp[n][m]即為所求.
程式碼實現
class MinCost {
public:
int findMinCost(string A, int n, string B, int m, int ic, int dc, int rc)
{
vector< vector<int> > dp(n+1, vector<int>(m+1, 0) );
for (int i=1; i<=m; ++i)
dp[0][i] = ic*i;
for (int i=1; i<=n; ++i)
dp[i][0 ] = dc*i;
for (int i=1; i<=n; ++i)
{
for (int j=1; j<=m; ++j)
{
int case1 = dp[i-1][j]+dc;
int case2 = dp[i][j-1]+ic,case3 = dp[i-1][j-1];
if(A[i-1] != B[j-1])
case3 += rc;
dp[i][j] = min(min(case1, case2), case3);
}
}
return dp[n][m];
}
};
相關推薦
動態規劃-優化編輯器問題
題目描述: 對於兩個字串A和B,我們需要進行插入、刪除和修改操作將A串變為B串。 定義ic,dc,rc分別為三種操作的代價,請設計一個高效演算法,求出將A串變為B串所需要的最少代價。 給定兩個字串A和
【bzoj2216】[Poi2011]Lightning Conductor 1D1D動態規劃優化
規劃 sample long 得到 mes tput stream truct 優化 Description 已知一個長度為n的序列a1,a2,…,an。對於每個1<=i<=n,找到最小的非負整數p滿足 對於任意的j, aj < = a
動態規劃優化過程
ash put 動態規劃 class 一次 int 遞歸 col AI 題目:走10層樓梯,每步只能走1或2步 1: 將每次的進行排列組合:2的10次冪 2: 最後差一步到第10層的有幾種情況?從9到10或從8到10,2種情況這樣假設0到9走法有X種,0到8走法是Y種,0到
動態規劃優化
子序列 目標 [] 相等 復雜度 但是 表示 size 前綴和 bzoj2064 分裂 存在通解:把原始集合都合並,再一一拆開。 如果可以劃分一些集合,使得原始集合和目標集合對應的小集合相等,那麽可以節省操作次數。 ans=(n1-1)+(n2-1)-2*(x-1) x為劃
動態規劃之編輯距離問題
由公式可以看出,(i-1,j)對應刪除操作,(i,j-1)對應插入操作。 可以這樣理解,現在耗費了di-1,j步操作將字串a(1,i-1)轉換成了b(1,j),則在將a(1,i)轉換成b(1,j)時,我們可以直接刪掉字元a(i), 問題變成a(1,i-1)轉換成b(1,j),從而dij就等於d
leetcode 516. Longest Palindromic Subsequence 動態規劃優化問題
0 這個問題是求一個串中,迴文子串的最長的長度。 1 分析 首先分析是否能分解為子問題,s[0,i]與s[0,i+1]是否有關聯?有關聯,因為對s[0,i]後面加上一個字元x後,字元x可能是一個迴文串的最後一個字元,從而造成迴文串的增長。在串s[0,i]後面加上一個字元x後,挨個與之前的串進
動態規劃-LeetCode72-編輯距離
題目 給定兩個單詞 word1 和 word2,計算出將 word1 轉換成 word2 所使用的最少運算元 。 你可以對一個單詞進行如下三種操作: 插入一個字元 刪除一個字元 替換一個字元 示例 1: 輸入: word1 = "horse", word2 = "ros" 輸出: 3 解釋
動態規劃之編輯距離:用最少的字元操作將A變換成B
一、問題描述 設A和B是兩個字串,長度分別為n,m要用最少的字元操作(包括字元的插入、刪除、修改),這樣的操作稱為字串A到B的操作距離,記為d(A,B)。 二、思路分析 把求解編輯距離分為字串A從0個字元逐漸增
動態規劃之編輯距離
1、問題例如兩個字串 FAMILY 和 FRAME ,有兩種對齊方式:1)、F_A MIL YFRAME2)、_FAMILYFRAME第 1 種對齊需要付出的代價: 4 ,插入 R ,將 I 替換為 E ,刪除 L 、 Y 。第 2 種對齊需要付出的代價: 5 ,插入 F,將
AtCoder[ARC073F] Many Moves【動態規劃優化+線段樹】
題目描述: 有N個方格排成一排,它們按從左到右的順序被編號為1,2,…,N。 你有兩個硬幣,開始時分別被放在格A,B上,接下來你要按照順序完成Q次操作: 給定一個正整數xi,你要選出兩枚硬幣中的一枚移動到第xi格上。 注意,你需要花費1s的時間將硬幣移動
動態規劃求解編輯距離問題
題目描述: 要求兩字串有差異的字元個數。例如: aaaaabaaaaa aaaaacaabaa 這兩個字串,最大公共字串長度是5,但它們只有兩個字元不同,函式輸出值應為2。 如果是: aaabbbcccddd aaaeeeddd 函式的輸出值應該是6。 比較形象地形容一下,把
【1】【leetcode-72 動態規劃】 編輯距離
ade 均可 distance 刪除 new ret min sta 插入 (沒思路,很典型,重要) 給定兩個單詞 word1 和 word2,計算出將 word1 轉換成 word2 所使用的最少操作數 。 你可以對一個單詞進行如下三種操作: 插入一個字符 刪
CreatorPrimer(9)|優化編輯器
Cocos Creator遊戲開發主要是使用JavaScript語言,這裡向大家推薦Visual Studio Code和Webs
關係型資料庫工作原理-查詢優化器之動態規劃,貪婪演算法和啟發式演算法(17)
本文翻譯瞭如下章節, 介紹資料庫查詢優化器中尋找最優聯表方案動態規劃,貪婪演算法和啟發式演算法: 動態規劃、貪婪演算法和啟發式演算法-Dynamic programming, greedy algorithm and heuristic 關係型資
行編輯距離Edit Distance——動態規劃
add 最小 base 編輯 cpp style 進行 sel 等於 題目描寫敘述: 給定一個源串和目標串。可以對源串進行例如以下操作: 1. 在給定位置上插入一個字符 2. 替換隨意字符 3. 刪除隨意字符 寫一個程序。返回最小操作數,使得對源串進行這些操
java sql編輯器 動態報表 數據庫備份還原 quartz定時任務調度 自定義表單 SSM
大小 demo 結構 圖片顯示 登錄 效果 tab 雙向 mar A 調用攝像頭拍照,自定義裁剪編輯頭像,頭像圖片色度調節B 集成代碼生成器 [正反雙向](單表、主表、明細表、樹形表,快速開發利器)+快速表單構建器 freemaker模版技術 ,0個代碼不用寫,生成完整的一
8.動態規劃(1)——字符串的編輯距離
有一個 delete 算法導論 根據 algo img void stat pre 動態規劃的算法題往往都是各大公司筆試題的常客。在不少算法類的微信公眾號中,關於“動態規劃”的文章屢見不鮮,都在試圖用最淺顯易懂的文字來描述講解動態規劃,甚至有的用
Gym 100829S_surf 動態規劃的優化
ac代碼 暴力 頭文件 復雜度 優化 p值 萬能 col ets 題目大意是,非你若幹個任務,任務分別對應開始時間、預期收益、持續時間三項指標,讓你從中選擇一個受益最大的方案(沒有開始時間相同的任務)。 於是,標準狀態轉移方程應當為,設DP[K]為選擇了前K個任務的最大收益
java sql編輯器 動態報表 數據庫備份還原 quartz定時任務調度 自定義表單 java圖片爬蟲
springmvcmybatis整合 bootstrap 框架源碼 spring html5 官網 http://www.fhadmin.org/A代碼編輯器,在線模版編輯,仿開發工具編輯器,pdf在線預覽,文件轉換編碼B 集成代碼生成器 [正反雙向](單表、主表、明細表、樹形表,快速開
vim 編輯器優化問題
細節問題用xhell連接服務器使用優化過的 vim編輯器無法出現選項 set nocompatible set history=100filetype onfiletype plugin onfiletype indent on set autoread set mouse=a syntax enabl