演算法第三章
1、 對動態規劃演算法的理解:動態規劃就是將一個大問題變成一個個子問題再去解決,而每個子問題都是互相有聯絡的,不像二分法是獨立存在的。而這些子問題都可以通過遞迴或者多重迴圈來解決,最終得出最終答案。無論是矩陣連乘問題,揹包問題,還是我們實踐中的三道實驗題目,都是通過子問題來得出。我覺得三角形那個是最典型的,一層層解決,能夠讓人對動態規劃有更深的理解。動態規劃是很好的演算法,以後處理問題的時候可以先考慮這個演算法,實現起來也清晰簡單。
2、 列出遞迴方程:
① dp[i] = max(dp[j]+1, dp[i]);
② i==n, dp[i] = 0;
i<n, dp[i] = min{ r[i][k] + dp[k] }, i<k<=n;
3、 結對程式設計情況:做動態規劃作業時應該先獨立思考,然後互相討論。一開始寫動態規劃作業的時候,兩個人都有不同的想法,處理的角度可能有點偏差。後來經過討論確定想法其實是一致的,就都自己先把自己的程式碼打出來,再互相討論,最後互相修改,一起進步。平日寫作業結對程式設計效果不明顯,實驗課上比較不錯。
相關推薦
演算法第三章上機實踐
1.實踐題目 最大子段和 2.問題描述 給定n個整數(可能為負數)組成的序列a[1],a[2],a[3],…,a[n],求該序列如a[i]+a[i+1]+…+a[j]的子段和的最大值。當所給的整數均為負數時,定義子段和為0。 要求演算法的時間複雜度為O(n)。 輸入格式: 輸入有兩行:
演算法第三章實踐
1、 實踐題目:最大子段和 2、 問題描述:給定n個整數(可能為負數)組成的序列a[1]a[2]……a[n],求該序列如a[i]+a[i+1]……a[j]的子段和最
演算法第三章
1、 對動態規劃演算法的理解:動態規劃就是將一個大問題變成一個個子問題再去解決,而每個子問題都是互相有聯絡的,不像二分法是獨立存在的。而這些子問題都可以通過遞迴或者多重迴圈來解決,最終得出最終答案。無論是矩陣連乘問題,揹包問題,還是我們實踐中的三道實驗題目,都是通過子問題來得出。我覺得三角形那個是
【實踐】演算法第三章上機實踐報告
1. 實踐題目 7-3 編輯距離問題 2. 問題描述 設A和B是2個字串。要用最少的字元操作將字串A轉換為字串B。這裡所說的字元操作包括 (1)刪除一個字元; (2)插入一個字元; (3)將一個字元改為另一個字元。 將字串A變換為字串B所用的最少字元運算元稱為字串A到 B的編輯距離,記為
演算法第三章上機實踐報告
實踐題目 7-1 數字三角形 (30 分) 給定一個由 n行數字組成的數字三角形如下圖所示。試設計一個演算法,計算出從三角形 的頂至底的一條路徑(每一步可沿左斜線向下或右斜線向下),使該路徑經過的數字總和最大。 輸入
演算法 第三章實踐報告
1.實踐題目 數字三角形 2.問題描述 給定一個由 n行數字組成的數字三角形如下圖所示。試設計一個演算法,計算出從三角形 的頂至底的一條路徑(每一步可沿左斜線向下或右斜線向下),使該路徑經過的數字總和最大。 3.演算法描述 for(j=1;j<=n;j++) a[n][
演算法第三章實踐報告
7-1數字三角形 1.實踐題目 給定一個由 n行數字組成的數字三角形如下圖所示。試設計一個演算法,計算出從三角形 的頂至底的一條路徑(每一步可沿左斜線向下或右斜線向下),使該路徑經過的數字總和最大。 2.問題描述 輸入格式: 輸入有n+1行: 第 1 行是數字三角形的行數 n,
演算法第三章實驗報告
實踐報告任選一題進行分析。內容包括: 實踐題目 最大子段和 問題描述 給定n個整數(可能為負數)組成的序列a[1],a[2],a[3],…,a[n],求該序列如a[i]+a[i+1]+…+a[j]的子段和的最大值。當所給的整數均為負數時,定義子段和為0。 要求演算法的時間複雜度為
演算法第三章上機實驗
演算法第三章上機實驗 數字三角形 給定一個由 n行數字組成的數字三角形如下圖所示。試設計一個演算法,計算出從三角形 的頂至底的一條路徑(每一步可沿左斜線向下或右斜線向下),使該路徑經過的數字總和最大。 #include <iostream> using namespace std; in
【實踐報告】演算法第三章實踐報告
1.實踐題目 7-2最大子段和 給定n個整數(可能為負數)組成的序列a[1],a[2],a[3],…,a[n],求該序列如a[i]+a[i+1]+…+a[j]的子段和的最大值。當所給的整數均為負數時,定義子段和為0。 要求演算法的時間複雜度為O(n)。
演算法第三章上機實驗報告
1.實踐題目 7-2 最大子段和 2.問題描述 給定n個整數(可能為負數)組成的序列a[1],a[2],a[3],…,a[n],求該序列如a[i]+a[i+1]+…+a[j]的子段和的最大值。當所給的整數均為負數時,定義子段和為0。 要求演算法的時間複雜度為O(n)。 3.演算法描述 首
【作業】演算法第三章作業
(1)你對動態規劃演算法的理解 動態規劃演算法通常用於求解具有某種最優性質的問題。在這類問題中,可能會有許多可行解。每一個解都對應於一個值,我們希望找到具有最優值的解。動態規劃演算法與分治法類似,其基本思想也是將待求解問題分解成若干個子問題,先求解子問題,然後從這些子問題的解得到原問題的解。與分治法不同的是
為什麼我要放棄javaScript資料結構與演算法(第三章)—— 棧
有兩種結構類似於陣列,但在新增和刪除元素時更加可控,它們就是棧和佇列。 第三章 棧 棧資料結構 棧是一種遵循後進先出(LIFO)原則的有序集合。新新增的或待刪除的元素都儲存在棧的同一端,稱為棧頂,另一端就叫做棧底。在棧裡, 新元素都靠近棧頂,舊元素都接近棧底。 棧也被用在程式語言的編譯器和記憶體中儲存
《java常用演算法手冊》 第三章 演算法思想
//窮舉 public class Exhaustion { public static void main(String args[]) { Exhaustion e = new Exhaustion(); System.out.println(e.cal(1
演算法競賽入門經典(第二版)第三章陣列和字串習題3-4週期串
如果一個字串可以由某個長度為k的字串重複多次得到,則稱該串以k為週期。例如abcabcabc以3為週期(注意,它也以6和12為週期)。輸入一個長度不超過80的字串,輸出其最小週期 #include<stdio.h> int main() { char a[100];
演算法競賽入門經典(第二版)第三章陣列和字串習題3-3數數字
把前n(n<=10000)個整數順次解除安裝一起:123456789101112…數一數0~9各出現多少次(輸出10個整數,分別是0,1,…,9出現的次數) #include<stdio.h> #define N 100000 char s[N],temp[10]; i
演算法競賽入門經典(第二版)第三章陣列和字串習題3-2分子量
給出一種物質的分子式不帶括號,求分子量。本題中的分子式只包含4種原子分別為CHON,原子量分別為12.01,1.008,16.00,14.01(單位g/mol)。例如,C6H5OH的分子量是94.108g/mol #include <stdio.h> int main() {
演算法競賽入門經典(第二版)第三章陣列和字串習題3-1得分
給出一個由O和X組成的串(長度1-80)統計得分。每個O的得分為目前連續出現的O的個數,X的得分為0。 #include <stdio.h> int main() { int b=0,c=0; int j=1; char a[80]; scan
演算法競賽入門經典(第二版)第三章陣列和字串中競賽題目例題3-5 生成元
如果x加上x的各個數字之和得到y,就說x是y的生成元。給出n(1<=n<=100000)求最小生成元。無解輸出0.例如n=216時的解為198 分析 本題看起來是個數學題實則不然。假設所求生成元為m不難發現m<n.換句話說只需列舉所有的m<n看看有沒有哪個數是n的
演算法競賽入門經典(第二版)第三章陣列和字串中競賽題目例題3-4猜數字
實現一個經典猜數字遊戲。給定答案序列和使用者猜的序列,統計有多少數字位置正確A,有多少數字在兩個序列都出現過但位置不對B 輸入包含多組資料。每組第一行為序列長度為n,第二行是答案序列,接下來是若干猜測序列。猜測序列全0時該組資料結束。n=0時輸入結束 [分析] 直接統計可得A,為