摘要:猜對則本次猜測免費,猜錯則本次猜測需要花費和數字等額的金錢。其實這題的英文表述有些問題,確切來說,在所有能夠確保找到目標值的方法中,找到花費金錢最少的哪種。當等于時,即從中找到目標數字,確保找到一個數字至少需要多少錢。
題目要求
We are playing the Guess Game. The game is as follows: I pick a number from 1 to n. You have to guess which number I picked. Every time you guess wrong, I"ll tell you whether the number I picked is higher or lower. However, when you guess a particular number x, and you guess wrong, you pay $x. You win the game when you guess the number I picked. Example: n = 10, I pick 8. First round: You guess 5, I tell you that it"s higher. You pay $5. Second round: You guess 7, I tell you that it"s higher. You pay $7. Third round: You guess 9, I tell you that it"s lower. You pay $9. Game over. 8 is the number I picked. You end up paying $5 + $7 + $9 = $21. Given a particular n ≥ 1, find out how much money you need to have to guarantee a win.
一個猜數字游戲,數字區間為1~n,每猜一次,會有人告訴你猜中了或者當前的數字是大于結果值還是小于結果值。猜對則本次猜測免費,猜錯則本次猜測需要花費和數字等額的金錢。
問如果要確保能夠猜中數字,最少要花費多少錢。
其實這題的英文表述有些問題,確切來說,在所有能夠確保找到目標值的方法中,找到花費金錢最少的哪種。
思路我們先用一個比較簡單的數字來找規律。當n等于3時,即從1,2,3中找到目標數字,確保找到一個數字至少需要多少錢。
查詢序列如下:
目標值3:1,2 2
目標值2:1,3
目標值1:3,2,2
可見如果要找到1,2,3中任意一個數字,最少要花費2元錢,即從2開始查詢,如果命中,則花費0元,如果沒有命中也知道目標值比2小還是比2大,下次猜測一定命中,因此該序列中找到任何一個數字最多花費2元錢。
如此可見,假如要知道min(1,n)的值,只要找到花費最小的中間點k,即遞歸的公式相當于min(1,n) = k + Math.max(min(1, k-1), min(k+1,n)) 1<=k<=n找到最小的min即可。
思路一:自頂向下的動態規劃public int getMoneyAmount(int n) { int[][] tmp = new int[n+1][n+1]; for(int[] row: tmp){ Arrays.fill(row, Integer.MAX_VALUE); } return getMoneyAmount(n, 1, n, tmp); } public int getMoneyAmount(int n, int lft, int rgt, int[][] tmp) { if(lft>=rgt) return 0; if(tmp[lft][rgt] != Integer.MAX_VALUE) return tmp[lft][rgt]; for(int i = lft ; i<=rgt ; i++) { tmp[lft][rgt] = Math.min(tmp[lft][rgt], Math.max(i + getMoneyAmount(n, lft, i-1, tmp), i + getMoneyAmount(n, i+1, rgt, tmp))); } return tmp[lft][rgt]; }思路二:自底向上的動態規劃
public int getMoneyAmount(int n) { int[][] dp = new int[n+1][n+1]; for(int i = 2 ; i<=n ; i++) { for(int j = i-1 ; j>0 ; j--) { int min = Integer.MAX_VALUE; for(int k = j+1 ; k
文章版權歸作者所有,未經允許請勿轉載,若此文章存在違規行為,您可以聯系管理員刪除。
轉載請注明本文地址:http://specialneedsforspecialkids.com/yun/77455.html
摘要:題目鏈接又是一道的題,關鍵是找。表示最少的,當范圍是的時候。所以要求就應該遍歷切分點找出最小的值,這個切分點可能把問題分成左邊或者右邊,要取最大值才能保證所有的值都能贏。 375. Guess Number Higher or Lower II 題目鏈接:https://leetcode.com/problems... 又是一道dp的題,關鍵是找subproblem。dp[i][j]表...
找出string里的單詞。 186. Reverse Words in a String II, 434. Number of Segments in a String combination類型題 77. Combinations 39. Combination Sum 40. Combination Sum II 216. Combination Sum III 494. Target S...
摘要:在線網站地址我的微信公眾號完整題目列表從年月日起,每天更新一題,順序從易到難,目前已更新個題。這是項目地址歡迎一起交流學習。 這篇文章記錄我練習的 LeetCode 題目,語言 JavaScript。 在線網站:https://cattle.w3fun.com GitHub 地址:https://github.com/swpuLeo/ca...我的微信公眾號: showImg(htt...
摘要:題目要求游戲簡單來說就是你隨手寫下一個位數,并讓你同學猜這個數字是什么。第二次再在此基礎上計算重合的值和沒有重合的值的個數。這樣的話,如果下一次遇到重復但是位置不同的值,我們可以知道它是否已經在中或是中出現過。 題目要求 You are playing the following Bulls and Cows game with your friend: You write down ...
Problem You are playing the following Bulls and Cows game with your friend: You write down a number and ask your friend to guess what the number is. Each time your friend makes a guess, you provide a ...
閱讀 1413·2023-04-26 01:58
閱讀 2289·2021-11-04 16:04
閱讀 1777·2021-08-31 09:42
閱讀 1768·2021-07-25 21:37
閱讀 1069·2019-08-30 15:54
閱讀 2078·2019-08-30 15:53
閱讀 3055·2019-08-29 13:28
閱讀 2693·2019-08-29 10:56