題目描述如下:
這是一道關於動態規劃的簡單題,雖說是簡單題,但是關於動態規劃的,看起來就有點恐懼,但看到這道題是簡單題,頓時就覺得「天晴了,雨停了,我覺得我又行了」,然後就開始想關於他地動態遞推公式,我一開始地想法是(由於題目要求小偷不能同時偷相鄰兩個房屋,所以我覺得遞迴公式是dp[i] = dp[i-2]+nums[i]),然後很快就寫出了程式,可是提交地時候卻沒有通過
最後還是沒辦法只有去看了題解:
看來還是我理解的有問題,它的遞推公式應該是dp[i] = max(dp[i-2]+nums[i],dp[i-1]),總結來說我之所以會得出錯誤的遞推公式,還是對於動態規劃的思想理解的不到位,這裡面的動態遞推關係應該是每一步存的都是到達那一步的時候所能偷竊到的最大金額數(而我當時想的是小偷到達那個房子時偷竊的金額數,並沒有考慮是否最大)。
下面就是實現**了:
class solution {
public int rob(int nums) {
int dp = new int[nums.length];
if(nums.length==0)return 0;
if(nums.length==1)return nums[0];
if(nums.length==2) return nums[0]>nums[1]?nums[0]:nums[1];
dp[0] = nums[0];
dp[1] = math.max(nums[0],nums[1]);
int max = nums[0]>nums[1]?nums[0]:nums[1];
for(int i=2;idp[i]=math.max(dp[i-2]+nums[i],dp[i-1]);
if(maxmax = dp[i];
return max;
動態規劃 經典題目
made by syx time 2010年7月17日 13 58 47 矩陣連乘 最長公共子串行 最長公共子串行 include char x 8 char y 7 int b 9 8 int c 9 8 void printarray int i1,int j1,int i2,int j2,in...
動態規劃經典題目整理
複雜度 o n w o nw o nw n nn為物品種類,w ww是揹包的重量 目的 使得揹包中的物品價值最大化 單副本揹包問題 每種物品只有一件 k w j ma xk w,j max k w,j max k w j k w,j k w,j 代表揹包重量為w ww,有j jj件物品時候的最大價值...
動態規劃經典題目總結
題意 給定乙個由n行數字組成的數字三角形 試設計乙個演算法,計算出從三角形的頂至底的一條路徑,使該路徑經過的數字總和最大。對於給定的由n行數字組成的數字三角形,計算從三角形的頂至底的路徑經過的數字和的最大值。input 輸入資料的第1行是數字三角形的行數n,1 n 100。接下來n行是數字三角形各行...