Guess Number Higher or Lower II
2016-09-02 14:35
459 查看
看了半天还是似懂非懂,o(╯□╰)o
用了极小极大算法:在1-n个数里面,我们任意猜一个数(设为i),保证获胜所花的钱应该为 i + max(w(1 ,i-1), w(i+1 ,n)),这里w(x,y))表示猜范围在(x,y)的数保证能赢应花的钱,则我们依次遍历 1-n作为猜的数,求出其中的最小值即为答案
用了极小极大算法:在1-n个数里面,我们任意猜一个数(设为i),保证获胜所花的钱应该为 i + max(w(1 ,i-1), w(i+1 ,n)),这里w(x,y))表示猜范围在(x,y)的数保证能赢应花的钱,则我们依次遍历 1-n作为猜的数,求出其中的最小值即为答案
class Solution { public: int getMoneyAmount(int n) { vector<vector<int> > table(n+1,vector<int>(n+1,0)); int res = DP(table, 1, n); return res; } int DP(vector<vector<int> > &t, int s, int e) { if (s >= e) return 0; if (t[s][e] != 0) return t[s][e]; int res = INT_MAX; for (int k = s; k <= e; k++) { int tmp = k + max(DP(t, s, k - 1), DP(t, k + 1, e));//极大部分 res = min(res, tmp);//极小部分,合起来就是极小极大算法 } t[s][e] = res;//这个配合上面的if条件做剪枝用,其实这个迭代过程生成了一颗特别大的博弈树,dp数组只是记载了一些迭代路径 return res; } };用n=3迭代着在纸上写了写,明白了不少
相关文章推荐
- 375. Guess Number Higher or Lower II
- LeetCode 375. Guess Number Higher or Lower II
- [leetcode-375]Guess Number Higher or Lower II(java)
- 375. Guess Number Higher or Lower II
- 【LEETCODE】375- Guess Number Higher or Lower II [Python]
- [leetcode] 375. Guess Number Higher or Lower II
- [TODO] LeetCode #375: Guess Number Higher or Lower II
- 375. Guess Number Higher or Lower II
- 375. Guess Number Higher or Lower II
- leetcode 375. Guess Number Higher or Lower II
- [leetcode] 375. Guess Number Higher or Lower II 解题报告
- LeetCode 375. Guess Number Higher or Lower II
- 375. Guess Number Higher or Lower II
- 375. Guess Number Higher or Lower II
- 375. Guess Number Higher or Lower II
- 374,375. Guess Number Higher or Lower I,II
- leetcode:Guess Number Higher or Lower II
- 375. Guess Number Higher or Lower II
- 375. Guess Number Higher or Lower II
- leetcode_375. Guess Number Higher or Lower II ? 待解决