最小編輯代價

最小編輯代價問題:

對于兩個字符串A和B,我們需要進行插入、刪除和修改操作將A串變為B串,定義c0,c1,c2分別為三種操作的代價,請設計一個高效算法,求出將A串變為B串所需要的最少代價。

給定兩個字符串AB,及它們的長度和三種操作代價,請返回將A串變為B串所需要的最小代價。保證兩串長度均小于等于300,且三種代價值均小于等于100。

測試樣例:
"abc",3,"adc",3,5,3,100
返回:8

問題分析:看到這道題,首先想到的是編輯距離問題,可以說是有異曲同工之處,但需要注意的是要將增刪改的代價考慮進去。

注意:(1)增刪的操作只能是在A串上操作,增加B[j]:h[i][j] = h[i][j-1]+c0;刪除A[i]:h[i][j] = h[i-1][j]+c1;

(2)修改的操作要比較代價大小,因為刪除一次再插入一次也可以看做是修改操作。

程序實現:

 1 class MinCost {
 2 public:
 3     int min2(int a,int b){
 4         return a<b?a:b;
 5     }
 6     int min3(int a,int b,int c){
 7         return min2(a,b)<c?min2(a,b):c;
 8     }
 9     int findMinCost(string A, int n, string B, int m, int c0, int c1, int c2) {
10         // write code here
11         int h[n+1][m+1];
12         h[0][0] = 0;
13         for(int i=1;i<=n;i++)
14             h[i][0] = i * c1;
15         for(int j=1;j<=m;j++)
16             h[0][j] = j * c0;
17         for(int i=1;i<=n;i++){
18             for(int j=1;j<=m;j++){
19                 if(A[i-1] == B[j-1])
20                     h[i][j] = h[i-1][j-1];
21                 else{
22                     int Delete_cost = h[i-1][j] + c1;//刪除A[i]
23                     int Insert_cost = h[i][j-1] + c0;//插入B[j]
24                     int Modify_cost = h[i-1][j-1] + min2(c0+c1,c2);//修改A[i]為B[j]
25                     h[i][j] = min3(Delete_cost,Insert_cost,Modify_cost);
26                 }
27             }
28         }
29         return h[n][m];
30     }
31 };

轉載請注明出處:

C++博客園:godfrey_88

http://www.cnblogs.com/gaobaoru-articles/

轉載于:https://www.cnblogs.com/gaobaoru-articles/p/5452680.html

本文來自互聯網用戶投稿,該文觀點僅代表作者本人,不代表本站立場。本站僅提供信息存儲空間服務,不擁有所有權,不承擔相關法律責任。
如若轉載,請注明出處:http://www.pswp.cn/news/457994.shtml
繁體地址,請注明出處:http://hk.pswp.cn/news/457994.shtml
英文地址,請注明出處:http://en.pswp.cn/news/457994.shtml

如若內容造成侵權/違法違規/事實不符,請聯系多彩編程網進行投訴反饋email:809451989@qq.com,一經查實,立即刪除!

相關文章

Android中的數據庫

2019獨角獸企業重金招聘Python工程師標準>>> 1.1. 什么時候使用數據庫 有大量相似結構的數據需要存儲的時候就可以使用數據庫。 1.2. SQLite的簡介 SQLite是一款輕量級的數據庫。它的設計目標是嵌入式的&#xff0c;而且目前已經在很多嵌入式產品中使用了它。Androi…

python計算績效工資_python實現 --工資管理系統

原博文 2017-07-25 22:41 ? # -*- coding: utf-8 -*- __author__ hjianli # import re import os info_message """Alex 100000 Rain 80000 Egon 50000 Yuan 30000 """ #序列字典 xulie_...01669 相關推薦 2019-09-28 21:13 ? Python python…

為Windows Server 2012 R2指定授權服務器

為Windows Server 2012 R2指定授權服務器在Windows Server 2008 R2的終端服務中&#xff0c;可以手動指定授權服務器&#xff0c;而在Windows Server 2012 R2中&#xff0c;默認只能通過"遠程桌面連接服務"管理器&#xff0c;指定授權服務器&#xff0c;而要使用遠程…

spring5高級編程_Spring 5.X系列教程:滿足你對Spring5的一切想象-持續更新

簡介是什么讓java世界變得更好&#xff0c;程序員變得更友愛&#xff0c;禿頭率變得不是那么的高&#xff0c;讓程序員不必再每天996&#xff0c;有時間找個女朋友&#xff1f;是Spring。是什么讓企業級java應用變得簡單易懂&#xff0c;降低了java程序員的進入門檻&#xff0c…

關于resolve非泛型方法不能與類型實參一起使用

今天mvc新建三層時&#xff0c;寫到bll層中一直報下面的錯誤&#xff0c;檢查了幾遍趕腳并沒有什么錯。最后發現缺少一些引用。 如下面的圖&#xff0c;少添加了下面的兩個引用.Unity是微軟模式與實踐團隊開發的一個輕量級、可擴展的依賴注入容器, Microsoft.Practices.Unity.C…

設計模式-Singleton

2019獨角獸企業重金招聘Python工程師標準>>> Singleton算是知道的設計模式中最簡單的最方便實現的了&#xff0c;模式實現了對于類提供唯一實例的方法&#xff0c;在很多系統中都會用到此模式。在實際項目中使用全局變量&#xff0c;或者靜態函數等方式也可以達到這…

dump分析工具_Java應用CPU過高,如何排查?參考解決思路和常用工具總結

本文總結了一些常見的線上應急現象和對應排查步驟和工具。分享的主要目的是想讓對線上問題接觸少的同學有個預先認知&#xff0c;免得在遇到實際問題時手忙腳亂。畢竟作者自己也是從手忙腳亂時走過來的。只不過這里先提示一下。在線上應急過程中要記住&#xff0c;只有一個總體…

st官網下載stm32固件庫方法

進入www.st.com官網------把網站改成中文&#xff08;就在右上方&#xff09;----點擊產品-----選擇右側的微控制器選項------選擇左側的STM32 32位ARM CortexMCU-----選擇左側的STM32F1系列-----選擇STM32103-----選擇中間部分mcu對應型號&#xff08;我用的是STM32F103ZE)---…

mysql5.5提示Deprecated: mysql_query(): The mysql extension is deprecated

解決方法1&#xff1a;在php程序代碼里面設置報警級別 <?php error_reporting E_ALL & ~E_DEPRECATED 方法2&#xff1a;禁止php報錯 display_errors On 改為 display_errors Off 方法3&#xff1a;使用mysqli或者PDO 建議大家盡快取消mysql&#xff0c;全部都走…

JavaScript強化教程 —— Cocos2d-JS極速調試技巧

本文為 H5EDU 機構官方 HTML5培訓 教程&#xff0c;主要介紹&#xff1a;JavaScript強化教程 —— Cocos2d-JS極速調試技巧 本文教大家一個調試Cocos2d-JS的小技巧&#xff0c;我都是這么用的&#xff0c;特意來告訴大家這個輕量快速的調試技巧。1.首先我們需要安裝官方的cocos…

dos攻擊命令_Kali Linux系列之拒絕服務攻擊(DOS)實戰(上)

(你的世界是個什么樣的世界&#xff1f;你說&#xff0c;我們傾聽!)-----------------小百科拒絕服務攻擊即是攻擊者想辦法讓目標機器停止提供服務&#xff0c;是黑客常用的攻擊手段之一。其實對網絡帶寬進行的消耗性攻擊只是拒絕服務攻擊的一小部分&#xff0c;只要能夠對目標…

stm32定時器配置

stm32通用定時器 STM32的定時器是個強大的模塊&#xff0c;定時器使用的頻率也是很高的&#xff0c;定時器可以做一些基本的定時&#xff0c;還可以做PWM輸出或者輸入捕獲功能。 時鐘源問題&#xff1a; 名為TIMx的有八個&#xff0c;其中TIM1和TIM8掛在APB2總線上&#xff0c;…

SQL 養成一個好習慣是一筆財富

來源&#xff1a;MR_ke 鏈接&#xff1a;http://www.cnblogs.com/MR_ke/archive/2011/05/29/2062085.html 我們做軟件開發的&#xff0c;大部分人都離不開跟數據庫打交道&#xff0c;特別是erp開發的&#xff0c;跟數據庫打交道更是頻繁&#xff0c;存儲過程動不動就是上千行&a…

【JAVA】StringTokenizer 迭代方式對字符串進行分割

StringTokenizer是一個用來分隔String的應用類&#xff0c;相當于VB的split函數。1.構造函數public StringTokenizer(String str)public StringTokenizer(String str, String delim)public StringTokenizer(String str, String delim, boolean returnDelims)第一個參數就是要分…

python數組定義_python定義數組

廣告關閉 騰訊云11.11云上盛惠 &#xff0c;精選熱門產品助力上云&#xff0c;云服務器首年88元起&#xff0c;買的越多返的越多&#xff0c;最高返5000元&#xff01; 一、一維數組 1. 直接定義matrix2. 間接定義matrixprint(matrix)輸出&#xff1a;3. 數組乘法matrix*5print…

Android-語言設置流程分析

Android手機語言切換行為&#xff0c;是通過設置-語言和輸入法-語言來改變手機的語言&#xff0c;其實這個功能很少被用戶使用。 以Android5.1工程源碼為基礎,從設置app入手來分析和學習語言切換的過程:一、語言設置界面&#xff1a;首先在設置app中找到語言設置這個Preference…

charles 安裝 ssl_最全面的解決Charles手機抓包的證書問題(步驟非常詳細)

源自公眾號文章: 徹底解決Charles手機抓包的證書問題簡介: Charles 抓包是日常開發當中經常會用到的技術, 在 Android 6 之前, 手機系統既信任系統內置的證書, 也信任用戶自己安裝的證書, 但是在 Android 7 之后, 卻發生了變化, 手機系統只信任系統內置的根證書. 當然了, 這是為…

oracle報錯:ORA-00054: 資源正忙,要求指定 NOWAIT

ORA-00054: 資源正忙, 但指定以 NOWAIT 方式獲取資源&#xff1a; --首先得到被鎖對象的session_idselect session_id from v$locked_object; --通過上面得到的session_id去取得v$session的sid和serial#&#xff0c;然后對該進程進行終止。--SELECT sid, serial#, username, o…

ARM中ROM,RAM,FLASH區別

RAM&#xff08;Random Access Memory&#xff09;的全名為隨機存取記憶體&#xff0c;它相當于PC機上的移動存儲&#xff0c;用來存儲和保存數據的。它在任何時候都可以讀寫&#xff0c;RAM通常是作為操作系統或其他正在運行程序的臨時存儲介質&#xff08;可稱作系統內存&…

excel 2007 vba與宏完全剖析_Excel宏VBA小技巧系列 | 分段加合

寫在前面的話 知識產權算是一個盛產數據的行業。專利啊商標啊著作啊&#xff0c;都有著錄項目。我們常說的專利分析、產業導航、企業導航、產業預警、競爭情報、技術綜述、知識產權評議等等&#xff0c;常規操作之一就要先處理著錄項目數據&#xff0c;然后再進行不同角度的分…