//連續自陣列的最大和問題,要求時間複雜度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 演算法,指的是 乙個問題的解決是依賴於若干個和該問題相似,但比該問題的問題規模更小的問題時,所採用的一種演算法。動態規劃是自底向上的思考問題的方法,通常要從最底層的問題開始考慮。而這類問題的特點是 解決所有本層次問題後,就可以解決上一層的問題...