這題背包問題其實難倒了我了qqq,我一開始寫真的沒有把它想得太深,誤把它當作背包問題的水題帶過(害自己花了 20 min 在思考我怎麼沒有寫對),下次要能夠多想一點啊!剛好今天也刷了一個經驗值可以讓我在變更優秀些,知道更多知識。也謝謝網路上的大神們分享程式碼讓我可以學習,今天也從JeraKrs學習到了一些比我更棒的命名規則,讓我的腦袋瓜有了更多知識,也謝謝學弟(承恩)給我這題讓我磨練,讓我可以把我的動態規劃知識複習一下,已經好久沒有練習動態規劃,都在寫字串演算法,嗚嗚。
#include<iostream> #include<bits/stdc++.h> #define LOCAL #define N 110 #define M 40 #define INF 1 << 30 usingnamespacestd; int n , m , dp[N] , val[N] , cost ;
intmax_safe(){ for(int i = 0 ; i < N ; i++) dp[i] = 0 ; dp[0] = INF ;
for(int i = 0 ; i < m ; i++){ for(int j = n ; j > 0 ; j--){ for(int k = 1 ; k <= j && val[i] >= k ; k++){ dp[j] = max(dp[j] , min(dp[j-k] , val[i] / k )); } } } return dp[n] ; }
intmin_cost(){ if(cost==0) return0 ; for(int i = 0 ; i <= n ; i++) dp[i] = INF ; dp[0] = 0 ;