Guess Number Higher or Lower II

来源:互联网 发布:淘宝网修改手机号码 编辑:程序博客网 时间:2024/05/20 12:21

看了半天还是似懂非懂,o(╯□╰)o

用了极小极大算法:在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迭代着在纸上写了写,明白了不少

0 0
原创粉丝点击