leetcode 每日一題日常打卡 面試題 17.16 按摩師問題 首先是問題描述: 乙個有名的按摩師會收到源源不斷的預約請求,每個預約都可以選擇接或不接。在每次預約服務之間要有休息時間,因此她不能接受相鄰的預約。給定乙個預約請求序列,替按摩師找到最優的預約集合(總預約時間最長),返回總的分鐘數。 思考:由於是個新手,剛接觸這道題想了十幾分鐘完全沒有任何思路,通過查資料得知這種求最優解的問題一般都是通過動態規劃求解。 但是我突然想到應該也可以用遞迴求解!通過建立乙個迴圈,從陣列第0個元素開始遍歷,因為這個問題是不能取臨近的值,因此,下面通過手寫講訴:
if(2 ==nums.size()) //如果有兩個元素,那麼直接比較大小,返回大的即可,這也是遞迴的結束條件
if(nums.size()>2
)
//ans[i] = nums[i]+massage((nums+i+2),numssize-i-2);
c.erase(c.begin(),c.begin()+i+2
);
int val = nums.at(i)+massage(c); //通過遞迴方式得出每一次的值
a.push_back(val);
i++;
}sort(a.begin(),a.end()); //排序從小到大
return
a.back();
}return0;}};
整數劃分問題 動態規劃 遞迴
將乙個整數 n 劃分為 不超過m 組 的劃分數 如 n 4m 3 輸出 4 思路 使用動態規劃 定義狀態 dp i j j的i劃分的組數 遞推 dp i j dp i j i dp i 1 j 當m n時,變成了常見的整數劃分問題 cpp view plain copy include includ...
動態規劃問題 1)數塔問題
數塔問題 一些數字堆成數塔的形狀,第1層有1個數,第2層有2個數 第n層有n個數。從第一層走到最後一層,每次只能走下一層相鄰的兩個數中的乙個,要求走的路徑上所有數字之和最大是多少。假設是下面這個數塔 這個數塔中最大和是30 首先如果用暴力法 每乙個數字都會有兩條路徑,時間複雜度為o 2 n 非常大的...
矩陣鏈問題(動態規劃和遞迴)
1.問題 給定n個矩陣 a1,a2,an 其中ai與ai 1是可乘的,i 1,2 n 1。如何確定計算矩陣連乘積的計算次序,使得依此次序計算矩陣連乘積需要的數乘次數最少。2.解析 假設在第k位置上找到最優解,那麼問題就變成兩個子問題 ai,ai 1 ak ak 1 aj 用dp i j 表示矩陣連乘...