博弈树,动态规划(计算好的子问题存储起来,以后直接取用)

public class GameTree {

/**

* 判断剩余球数,谁能取到最后谁赢,

* ,一人取一次,默认我方先取,,能否必胜,能就返回true,否则false

* @param x剩余球数

* @return

*/

static boolean f(int x){

int[] op={1,3,7,8};//每次取球只能有四种情况

for(int i=0;i<op.length;i++){

if (x>=op[i]) {

if(f(x-op[i])==false)return true;//博弈论,对方必输,则我方必胜

}

}

return false;//无论对方怎么走,都是true,那么我方必输

}

public static void main(String[] args) {

// 采用动态规划增加效率,已经计算好的子问题存储起来,以后直接取用

System.out.println(f(100));

}

}

博弈树,动态规划(计算好的子问题存储起来,以后直接取用)

时间: 2024-11-05 02:05:39

博弈树,动态规划(计算好的子问题存储起来,以后直接取用)的相关文章

动态规划 — 计算二项式系数

如果问题是由交叠的子问题所构成的,那么我们就可以用动态规划技术来解决它.也就是说,一个问题的解可由它的规模更小的子问题的解递推得出.由于子问题的交叠性质,所以采用递归地方法一次又一次地求解子问题时,进行了很多重复的工作.所以动态规划法建议:把子问题的解存入某个表中,通过表一步步反解出原始问题.斐波那契数列就是一个很好的例子: F(n) = F(n-1) + F(n-2)     当n≥2 F(0) = 0 F(1) = 1 如果直接采用递推公式求解第n个斐波那契数,那么会重复大量的无用工作,效率

ERP-U9 调入单审批流按子行存储地点自动审批设置

问题:由调入部门.调入存储地点负责人创建保存,提交后由调出部门.调出存储地点负责人审核. 控制创建人和调入存储地点负责人必须是同一个人. 审批流设置示例:

hdu 1507 Largest Rectangle in a Histogram 动态规划计算最大面积

记录动态规划dpl,dpr,分辨记录i左面的比i大的,右面比i大的,然后(dpr[i]-dpl[i]+1)*h[i]得出长度 动态转移方程while(temp>1 && h[temp-1]>=h[i]) temp=dpl[temp-1] /************************************************************************* > File Name: hdu1506.cpp > Author: yang &

[leetcode]304Range Sum Query 2D - Immutable动态规划计算二维数组中子数组的sum

303一维数组的升级版,方法就是用二维数组res存下从(0,0)到当前位置的sum,存的方法是动态规划,看着二维数组画圈比较好搞清楚其中的加减法 算子数组的sum的时候也是和存差不多的逻辑,就是某一部分加上另一部分,然后减去某一部分,逻辑画画圈就能看出来 比价重要的是动态规划存数的过程,以后二维数组问题应该会经常用 package com.DynamicProgramming; import java.util.HashMap; import java.util.Map; /** * Given

动态规划总结

动态规划通常应用于最优化问题,即要做出一组选择以达到一个最优解.在做选择的同时,经常出现同样形式的子问题.当某一特定的子问题可能出自于多于一种选择的集合时,动态规划是很有效的.关键技术是存储这些子问题每一个的解,以备它重复出现. 和分治法一样,动态规划是通过组合子问题的解而解决整个问题的.动态规划适用于子问题不是独立的情况,也就是各子问题包含公共的子子问题.动态规划算法对每个子子问题只求解一次,将其结果保存在一张表中,从而避免每次遇到各个子问题时重新计算答案. 动态规划通常应用于最优化问题.此类

算法导论--动态规划(钢条切割)

钢条切割问题 现有一段长度为n英寸的钢条和一个价格表pi,求切割方案使销售利益最大rn最大 长度为n英寸的钢条共有2n?1种不同的切割方案,因为可以每个整英寸的位置都可以决定切割或者不切割. 为了得到rn最大,可以把这个问题分成子问题求解,先切一刀,再考虑余下的部分的最大收益即求 rn=max{pk+rn?k}(k=1,2,3-n-1), pk部分不进行继续切割,直接作为一个整体售出 ; rn?k部分继续切割,考虑所有的情况,分成子问题. 求出所有k值对应的收益最大者作为rn 也有可能不进行任何

70. Climbing Stairs【leetcode】递归,动态规划,java,算法

You are climbing a stair case. It takes n steps to reach to the top. Each time you can either climb 1 or 2 steps. In how many distinct ways can you climb to the top? Note: Given n will be a positive integer. 题目分析:每次只能走1或2步,问n步的话有多少中走法???? 可以用动态规划和递归解

动态规划专题总结

动态规划所适用的问题是一个问题可以被分成若干个阶段,每一个阶段都需要做出决策,并且影响的下一个阶段的决策. 动态规划常常适用于重叠子问题,和最优子结构,的问题. 动态规划背后的基本思想非常简单.大致上,若要解一个给定问题,我们需要解其不同部分(即子问题),再合并子问题的解以得出原问题的解. 通常许多子问题非常相似,为此动态规划法试图仅仅解决每个子问题一次,从而减少计算量: 一旦某个给定子问题的解已经算出,则将其记忆化存储,以便下次需要同一个子问题解之时直接查表. 这种做法在重复子问题的数目关于输

动态规划学习中的一道题目

记得初中时候的一篇文章说,做学问,必须要有学和问两个方面. 做了一些动态规划题目之后偶然看到这个介绍动态规划的文章.然后遇见第一道题目就卡壳. 经过反思文章以及自己思考,总算对题目有了一些理解.下面分享给大家,初学者们看到这个题目不至于太过茫然——像我一样. 工厂生产某种产品,每单位(千件)的成本为1(千元),每次开工的固定成本为3(千元),工厂每季度的最大生产能力为6(千件).经调查,市场对该产品的需求量第一.二.三.四季度分别为        2,3,2,4(千件).如果工厂在第一.二季度将