dp,直接递推和记忆化搜索
leetcode 1553 吃掉N个橘子的最少天数
思路:除2或除3总比减一划算,所以先减掉余数再除。由于N很大,需要记忆化搜索;由于N很大,不能用数组,可以用unordered_map
class Solution { public: // vector<int>dp; unordered_map<int, int>mp; int dfs(int n) { if(mp[n]) return mp[n]; int& ans = mp[n]; if(n == 0) return ans=-1; // 特殊,1需要1次,0最小需要-1次 return ans = min(dfs(n/3)+n%3, dfs(n/2)+n%2)+1; } int minDays(int n) { // dp.resize(n+1, -1); return dfs(n); } };