演算法作業 求解餅乾問題 dp

2021-10-11 11:10:27 字數 826 閱讀 9296

題目:

剛看到這道題的時候,第一時間想到的是暴力,但是發現當x位數多起來後運算量太大,遂放棄。就考慮dp來求解,不過水平有限無法發現其狀態轉移方程,就參考了一下這位老哥的解法,發現很簡單。分解餅乾問題

其主要方法就是通過不斷求模取餘數,儲存餘數的狀態,狀態轉移方程為:dp[i][temp % n] += dp[i - 1][j]。**如下:

#include

#include

#include

#include

using std::cin;

using std::cout;

using std::endl;

using std::vector;

using std::string;

intmain()

//定義初始狀態

if(cookies[0]

=='x'

)else

for(

auto i =

1; i < cookies.

length()

; i++

)for

(auto j =

0; j < n; j++)}

else

} cout << dp[cookies.

length()

-1][

0]<< endl;

return0;

}//9999999999999x

//3

演算法作業 求解最大乘積問題 dp

這道題要求時間複雜度為o n 空間複雜度為o 1 因此用dp是最簡單的做法。由於這道題存在負數,所以我在儲存最大值時,也儲存了最小值。include include include using std cin using std cout using std endl using std strin...

dp演算法求解矩陣連乘的問題

一 動態規劃演算法與分治演算法的區別 動態規劃演算法與分治演算法的思想類似,都是通過將原問題分成一系列的子問題,並再求解每個子問題,將子問題合併的方式來解決問題。但是分治演算法在解決子問題有重疊的問題時,會出現很多重複的不必要的計算。分治演算法適合解決子問題沒有重疊的情況,分治演算法將問題劃分成互不...

DP求解有趣的數問題

dynamic programming 動態規劃 問題描述 我們把乙個數稱為有趣的,當且僅當 1.它的數字只包含0,1,2,3,且這四個數字都出現過至少一次。2.所有的0都出現在所有的1之前,而所有的2都出現在所有的3之前。3.最高位數字不為0。因此,符合我們定義的最小的有趣的數是2013。除此以外...