動態規劃問題

2022-08-16 12:57:12 字數 1822 閱讀 8034

//連續自陣列的最大和問題,要求時間複雜度o(n)

bool g_invalidinput = false;

int greatestsumofsubarray(int* array, int length)

int currentsum = 0;

int greatestsum = 0x80000000;

for (int i = 0; i < length; ++i)

return greatestsum;

}

//47:禮物的最大價值:利用二維陣列儲存中間結果,迴圈實現,動態規劃法,遞迴公式:

// 在座標(i, j)位置最大價值:f(i,j) = max(f(i, j-1), f(i-1, j)) + gift(i, j)

int getmaxvalue_solution(const int* values, int rows, int cols)

int* maxvalues = new int[rows * cols];

for (int row = 0; row < rows; ++row)

}int maxvalue = maxvalues[(rows - 1)*cols + (cols - 1)];

delete maxvalues;

maxvalues = nullptr;

return maxvalue;

}

//把數字翻譯成字串,有多少種不同的翻譯方法:遞迴分析,動態規劃方法實現(迴圈),從右往左翻譯

//f(i) = f(i+1) + g(i, i+1)*f(i+2), 其中g(i, i+1):numbers[i]numbers[i+1]組成的數字在10-25之間時為1,否則為0

int gettranslationscount(const string& numbers)

}counts[i] = count;

}count = counts[0];

delete counts;

counts = nullptr;

return count;

}int gettranslationscountport(int number)

//48: 最長不含重複字元的子字串(只含26個字母):遞迴分析, 迴圈實現,動態規劃法 先寫出遞推公式 ,再寫**

int longestsubarraywithoutduplication(const string& str)

else

if (curlength > maxlength)

maxlength = curlength;

}delete position;

return maxlength;

}

//醜數:求從小到達排列的第1500個醜數

//暴力列舉

bool isugly(int number)

int getuglynumber(int index)

return number;

}//利用醜數的定義,找出規律,每個醜數都是前面的醜數乘以2, 3, 5得到的,利用陣列儲存已排序的陣列

int min(int num1, int num2, int num3)

int getuglynumber2(int index)

int uglynumber = puglynumbers[index - 1];

delete puglynumbers;

return uglynumber;

}

動態規劃問題

思想 如果乙個問題是由交疊的子問題所構成,那麼我們就可以用動態規劃技術來解決它。一般來說,這樣的子問題出現在對給定問題求解的遞迴關係中。這個遞推關係包含了相 同問題的更小子問題的解。動態規劃法建議,與其對交疊子問題一次又一次的求解,不如把每個較小子問題只求解一次並把結果記錄在表中。例題 0 1揹包問...

動態規劃問題

時間限制 3000 ms 記憶體限制 65535 kb 難度 3 描述 ctest有n個蘋果,要將它放入容量為v的揹包。給出第i個蘋果的大小和價錢,求出能放入揹包的蘋果的總價錢最大值。輸入 有多組測試資料,每組測試資料第一行為2個正整數,分別代表蘋果的個數n和揹包的容量v,n v同時為0時結束測試,...

動態規劃問題

以下內容基於個人理解。一 什麼是動態規劃 動態規劃 dp 演算法,指的是 乙個問題的解決是依賴於若干個和該問題相似,但比該問題的問題規模更小的問題時,所採用的一種演算法。動態規劃是自底向上的思考問題的方法,通常要從最底層的問題開始考慮。而這類問題的特點是 解決所有本層次問題後,就可以解決上一層的問題...