• 多边形游戏
    • 问题简介
    • 问题分析
    • 超详细解题步骤
    • Java代码实现

多边形游戏

问题简介


  • 首先呢,介绍一下多边形游戏是个什么东东
  • 多边形游戏是一个单人玩的游戏,开始时有一个由n个顶点构成的多边形。每个顶点被赋予一个整数值,每条边被赋予一个运算符“+”或“*”。所有边依次用整数从1到n编号。
  • 游戏步骤:
    • 将一条边删除
    • 选择一条边E及由E连接的2个顶点V1和V2
    • 用一个新的顶点取代边E以及由E连接着的2个顶点V1和V2。将由顶点V1和V2的整数值通过边E上的运算得到的结果赋予新顶点
    • 重复以上步骤,直到所有边都被删除,游戏结束。游戏的得分就是所剩顶点上的整数值

我们的问题是: 根据给定的多边形,计算最高分和最底分

问题分析


  • 最优子结构性质

    • 这里呢,它是满足最优子结构性质的,我们不做过多的解释,直接看它的求解方法
  • 递归求解
    • 首先,我们在p(i, j)在op[i+s]处断开, 最大值记为maxf(i,j,s),最小值记为minf(i,j,s)

    • 因为只有加法和乘法,加法比较简单。对于乘法,可能存在负数,所以我们要对所有可能的结果做讨论,为了计算方便,我们可以定义如下表示
      a=m[i,i+s,0]        b=m[i,i+s,1]
      c=m[i+s,j-s,0]      d=m[i+s,j-s,1]

    • 当op[i+s]=‘+’
      m[i,j,0]=a+c         m[i,j,1]=b+d

    • 当op[i+s]=‘*’
      m[i,j,0]=min{ac,ad,bc,bd}
      m[i,j,1]=max{ac,ad,bc,bd}

    • 因此可有如下公式

    • 至于s的断开位置,可以取 1 到 j - 1, 如下

接下来,就是超超超超级详细的解题步骤

超详细解题步骤

这里,我们举了这样一个栗子

详细步骤如下

m(1,1,1) = 9
m(1,1,0) = 9
m(2,1,1) = -4
m(2,1,0) = -4
m(3,1,1) = 9
m(3,1,0) = 9
m(4,1,1) = 10
m(4,1,0) = 10
m(5,1,1) = -10
m(5,1,0) = -10


m(1,2) = m(1,1)op(2)m(2,1)
op(2) = “+”
m(1,2,1) = m(1,1,1) + m(2,1,1) = 5
m(1,2,0) = m(1,1,0) + m(2,1,0) = 5

m(2,2) = m(2,1)op(3)m(3,1)
op(3) = “+”
m(2,2,1) = m(2,1,1) + m(3,1,1) = 5
m(2,2,0) = m(2,1,0) + m(3,1,0) = 5

m(3,2) = m(3,1)op(4)m(4,1)
op(4) = “+”
m(3,2,1) = m(3,1,1) + m(4,1,1) = 19
m(3,2,0) = m(3,1,0) + m(4,1,0) = 19

m(4,2) = m(4,1)op(5)m(5,1)
op(5) = “*”
m(4,2,1) = max{m(4,1,1)*m(5,1,1), m(4,1,1)*m(5,1,0), m(4,1,0)*m(5,1,1), m(4,1,0)*m(5,1,0)} = -100
m(4,2,0) = min{m(4,1,1)*m(5,1,1), m(4,1,1)*m(5,1,0), m(4,1,0)*m(5,1,1), m(4,1,0)*m(5,1,0)} = -100

m(5,2) = m(5,1)op(1)m(1,1)
m(5,2,1) = m(5,1,1) + m(1,1,1) = -1
m(5,2,0) = m(5,1,0) + m(1,1,0) = -1


m(1,3)={m(1,1)op(2)m(2,2)m(1,2)op(3)m(3,1)m(1,3) = \begin{cases} m(1,1)op(2)m(2,2)\\ m(1,2)op(3)m(3,1) \end{cases}m(1,3)={m(1,1)op(2)m(2,2)m(1,2)op(3)m(3,1)​

op(2) = “+”
op(3) = “+”
m(1,3,1) = max{m(1,1,1)+m{2,2,1}, m(1,2,1)+m(3,1,1)} = 14 (m(1,1,1)+m(2,2,1))
m(1,3,0) = min{m(1,1,0)+m{2,2,0}, m(1,2,0)+m(3,1,0)} = 14 (m(1,1,0)+m(2,2,0))

m(2,3)={m(2,1)op(3)m(3,2)m(2,2)op(4)m(4,1)m(2,3) = \begin{cases} m(2,1)op(3)m(3,2)\\ m(2,2)op(4)m(4,1) \end{cases}m(2,3)={m(2,1)op(3)m(3,2)m(2,2)op(4)m(4,1)​

op(3) = “+”
op(4) = “+”
m(2,3,1) = max{m(2,1,1)+m(3,2,1), m(2,2,1)+m(4,1,1)} = 15 (m(2,1,1)+m(3,2,1))
m(2,3,0) = min{m(2,1,0)+m(3,2,0), m(2,2,0)+m(4,1,0)} = 15 (m(2,1,0)+m(3,2,0))

m(3,3)={m(3,1)op(4)m(4,2)m(3,2)op(5)m(5,1)m(3,3) = \begin{cases} m(3,1)op(4)m(4,2)\\ m(3,2)op(5)m(5,1) \end{cases}m(3,3)={m(3,1)op(4)m(4,2)m(3,2)op(5)m(5,1)​

op(4) = “+”
op(5) = “*”
m(3,3,1) = max{m(3,1,1)+m(4,2,1), max{m(3,2,1)*m(5,1,1), m(3,2,1)*m(5,1,0), m(3,2,0)*m(5,1,1), m(3,2,0)*m(5,1,0)}} = -91 (m(3,1,1)+m(4,2,1))
m(3,3,0) = min{m(3,1,0)+m(4,2,0), min{m(3,2,1)*m(5,1,1), m(3,2,1)*m(5,1,0), m(3,2,0)*m(5,1,1), m(3,2,0)*m(5,1,0)}} = -190 (m(3,2,1)*m(5,1,1))

m(4,3)={m(4,1)op(5)m(5,2)m(4,2)op(1)m(1,1)m(4,3) = \begin{cases} m(4,1)op(5)m(5,2)\\ m(4,2)op(1)m(1,1) \end{cases}m(4,3)={m(4,1)op(5)m(5,2)m(4,2)op(1)m(1,1)​

op(5) = “*”
op(1) = “+”
m(4,3,1) = max{max{m(4,1,1)*m(5,2,1), m(4,1,1)*m(5,2,0), m(4,1,0)*m(5,2,1), m(4,1,0)*m(5,2,0)}, m(4,2,1)+m(1,1,1)} = -10 (m(4,1,1)*m(5,2,1))
m(4,3,0) = min{min{m(4,1,1)*m(5,2,1), m(4,1,1)*m(5,2,0), m(4,1,0)*m(5,2,1), m(4,1,0)*m(5,2,0)}, m(4,2,0)+m(1,1,0)} = -91 (m(4,2,0)+m(1,1,0))

m(5,3)={m(5,1)op(1)m(1,2)m(5,2)op(2)m(2,1)m(5,3) = \begin{cases} m(5,1)op(1)m(1,2)\\ m(5,2)op(2)m(2,1) \end{cases}m(5,3)={m(5,1)op(1)m(1,2)m(5,2)op(2)m(2,1)​

op(1) = “+”
op(2) = “+”
m(5,3,1) = max{m(5,1,1)+m(1,2,1), m(5,2,1)+m(2,1,1)} = -5 (m(5,1,1)+m(1,2,1))
m(5,3,0) = min{m(5,1,0)+m(1,2,0), m(5,2,0)+m(2,1,0)} = -5 (m(5,1,0)+m(1,2,0))


m(1,4)={m(1,1)op(2)m(2,3)m(1,2)op(3)m(3,2)m(1,3)op(4)m(4,1)m(1,4) = \begin{cases} m(1,1)op(2)m(2,3)\\ m(1,2)op(3)m(3,2)\\ m(1,3)op(4)m(4,1) \end{cases}m(1,4)=⎩⎪⎨⎪⎧​m(1,1)op(2)m(2,3)m(1,2)op(3)m(3,2)m(1,3)op(4)m(4,1)​

op(2) = “+”
op(3) = “+”
op(4) = “+”
m(1,4,1) = max{m(1,1,1)+m(2,3,1), m(1,2,1)+m(3,2,1), m(1,3,1)+m(4,1,1)} = 24 (m(1,1,1)+m(1,2,1))
m(1,4,0) = min{m(1,1,0)+m(2,3,0), m(1,2,0)+m(3,2,0), m(1,3,0)+m(4,1,0)} = 24 (m(1,1,0)+m(2,3,0))

m(2,4)={m(2,1)op(3)m(3,3)m(2,2)op(4)m(4,2)m(2,3)op(5)m(5,1)m(2,4) = \begin{cases} m(2,1)op(3)m(3,3)\\ m(2,2)op(4)m(4,2)\\ m(2,3)op(5)m(5,1) \end{cases}m(2,4)=⎩⎪⎨⎪⎧​m(2,1)op(3)m(3,3)m(2,2)op(4)m(4,2)m(2,3)op(5)m(5,1)​

op(3) = “+”
op(4) = “+”
op(5) = “*”
m(2,4,1) = max{m(2,1,1)+m(3,3,1), m(2,2,1)+m(4,2,1), max{m(2,3,1)*m(5,1,1), m(2,3,1)*m(5,1,0), m(2,3,0)*m(5,1,1), m(2,3,0)*m(5,1,0)}} = -95 (m(2,1,1)+m(3,3,1))
m(2,4,0) = min{m(2,1,0)+m(3,3,0), m(2,2,0)+m(4,2,0), min{m(2,3,1)*m(5,1,1), m(2,3,1)*m(5,1,0), m(2,3,0)*m(5,1,1), m(2,3,0)*m(5,1,0)}} = -194 (m(2,1,0)+m(3,3,0))

m(3,4)={m(3,1)op(4)m(4,3)m(3,2)op(5)m(5,2)m(3,3)op(1)m(1,1)m(3,4) = \begin{cases} m(3,1)op(4)m(4,3)\\ m(3,2)op(5)m(5,2)\\ m(3,3)op(1)m(1,1) \end{cases}m(3,4)=⎩⎪⎨⎪⎧​m(3,1)op(4)m(4,3)m(3,2)op(5)m(5,2)m(3,3)op(1)m(1,1)​

op(4) = “+”
op(5) = “*”
op(1) = “+”
m(3,4,1) = max{m(3,1,1)+m(4,3,1), max{m(3,2,1)*m(5,2,1), m(3,2,1)*m(5,2,0), m(3,2,0)*m(5,2,1), m(3,2,0)*m(5,2,0)}, m(3,3,1)+m(1,1,1)} = -1 (m(3,1,1)+m(4,3,1))
m(3,4,0) = min{m(3,1,0)+m(4,3,0), min{m(3,2,1)*m(5,2,1), m(3,2,1)*m(5,2,0), m(3,2,0)*m(5,2,1), m(3,2,0)*m(5,2,0)}, m(3,3,0)+m(1,1,0)} = -181 (m(3,3,0)+m(1,1,0))

m(4,4)={m(4,1)op(5)m(5,3)m(4,2)op(1)m(1,2)m(4,3)op(2)m(2,1)m(4,4) = \begin{cases} m(4,1)op(5)m(5,3)\\ m(4,2)op(1)m(1,2)\\ m(4,3)op(2)m(2,1) \end{cases}m(4,4)=⎩⎪⎨⎪⎧​m(4,1)op(5)m(5,3)m(4,2)op(1)m(1,2)m(4,3)op(2)m(2,1)​

op(5) = “*”
op(1) = “+”
op(2) = “+”
m(4,4,1) = max{max{m(4,1,1)*m(5,3,1), m(4,1,1)*m(5,3,0), m(4,1,0)*m(5,3,1), m(4,1,0)*m(5,3,0)}, m(4,2,1)+m(1,2,1), m(4,3,1)+m(2,1,1)} = -14 (m(4,3,1)+m(2,1,1))
m(4,4,0) = min{min{m(4,1,1)*m(5,3,1), m(4,1,1)*m(5,3,0), m(4,1,0)*m(5,3,1), m(4,1,0)*m(5,3,0)}, m(4,2,0)+m(1,2,0), m(4,3,0)+m(2,1,0)} = -95 (m(4,2,0)+m(1,2,0))

m(5,4)={m(5,1)op(1)m(1,3)m(5,2)op(2)m(2,2)m(5,3)op(3)m(3,1)m(5,4) = \begin{cases} m(5,1)op(1)m(1,3)\\ m(5,2)op(2)m(2,2)\\ m(5,3)op(3)m(3,1) \end{cases}m(5,4)=⎩⎪⎨⎪⎧​m(5,1)op(1)m(1,3)m(5,2)op(2)m(2,2)m(5,3)op(3)m(3,1)​

op(1) = “+”
op(2) = “+”
op(3) = “+”
m(5,4,1) = max{m(5,1,1)+m(1,3,1), m(5,2,1)+m(2,2,1), m(5,3,1)+m(3,1,1)} = 4 (m(5,1,1)+m(1,3,1))
m(5,4,0) = min{m(5,1,0)+m(1,3,0), m(5,2,0)+m(2,2,0), m(5,3,0)+m(3,1,0)} = 4 (m(5,1,0)+m(1,3,0))


m(1,5)={m(1,1)op(2)m(2,4)m(1,2)op(3)m(3,3)m(1,3)op(4)m(4,2)m(1,4)op(5)m(5,1)m(1,5) = \begin{cases} m(1,1)op(2)m(2,4)\\ m(1,2)op(3)m(3,3)\\ m(1,3)op(4)m(4,2)\\ m(1,4)op(5)m(5,1) \end{cases}m(1,5)=⎩⎪⎪⎪⎨⎪⎪⎪⎧​m(1,1)op(2)m(2,4)m(1,2)op(3)m(3,3)m(1,3)op(4)m(4,2)m(1,4)op(5)m(5,1)​

op(2) = “+”
op(3) = “+”
op(4) = “+”
op(5) = “*”
m(1,5,1) = max{m(1,1,1)+m(2,4,1), m(1,2,1)+m(3,3,1), m(1,3,1)+m(4,2,1), max{m(1,4,1)*m(5,1,1), m(1,4,1)*m(5,1,0), m(1,4,0)*m(5,1,1), m(1,4,0)*m(5,1,0)}} = -86 (m(1,1,1)+m(2,4,1))
m(1,5,0) = min{m(1,1,0)+m(2,4,0), m(1,2,0)+m(3,3,0), m(1,3,0)+m(4,2,0), min{m(1,4,1)*m(5,1,1), m(1,4,1)*m(5,1,0), m(1,4,0)*m(5,1,1), m(1,4,0)*m(5,1,0)}} = -240 (m(1,4,1)*m(5,1,1))

m(2,5)={m(2,1)op(3)m(3,4)m(2,2)op(4)m(4,3)m(2,3)op(5)m(5,2)m(2,4)op(1)m(1,1)m(2,5) = \begin{cases} m(2,1)op(3)m(3,4)\\ m(2,2)op(4)m(4,3)\\ m(2,3)op(5)m(5,2)\\ m(2,4)op(1)m(1,1) \end{cases}m(2,5)=⎩⎪⎪⎪⎨⎪⎪⎪⎧​m(2,1)op(3)m(3,4)m(2,2)op(4)m(4,3)m(2,3)op(5)m(5,2)m(2,4)op(1)m(1,1)​

op(3) = “+”
op(4) = “+”
op(5) = “*”
op(1) = “+”
m(2,5,1) = max{m(2,1,1)+m(3,4,1), m(2,2,1)+m(4,3,1), max{m(2,3,1)*m(5,2,1), m(2,3,1)*m(5,2,0), m(2,3,0)*m(5,2,1), m(2,3,0)*m(5,2,0)}, m(2,4,1)+m(1,1,1)} = -5 (m(2,1,1)+m(3,4,1))
m(2,5,0) = min{m(2,1,0)+m(3,4,0), m(2,2,0)+m(4,3,0), min{m(2,3,1)*m(5,2,1), m(2,3,1)*m(5,2,0), m(2,3,0)*m(5,2,1), m(2,3,0)*m(5,2,0)}, m(2,4,0)+m(1,1,0)} = -185 (m(2,1,0)+m(3,4,0))

m(3,5)={m(3,1)op(4)m(4,4)m(3,2)op(5)m(5,3)m(3,3)op(1)m(1,2)m(3,4)op(2)m(2,1)m(3,5) = \begin{cases} m(3,1)op(4)m(4,4)\\ m(3,2)op(5)m(5,3)\\ m(3,3)op(1)m(1,2)\\ m(3,4)op(2)m(2,1) \end{cases}m(3,5)=⎩⎪⎪⎪⎨⎪⎪⎪⎧​m(3,1)op(4)m(4,4)m(3,2)op(5)m(5,3)m(3,3)op(1)m(1,2)m(3,4)op(2)m(2,1)​

op(4) = “+”
op(5) = “*”
op(1) = “+”
op(2) = “+”
m(3,5,1) = max{m(3,1,1)+m(4,4,1), max{m(3,2,1)*m(5,3,1), m(3,2,1)*m(5,3,0), m(3,2,0)*m(5,3,1), m(3,2,0)*m(5,3,0)}, m(3,3,1)+m(1,2,1), m(3,4,1)+m(2,1,1)} = -5 (m(3,1,1)+m(4,4,1))
m(3,5,0) = min{m(3,1,0)+m(4,4,0), min{m(3,2,1)*m(5,3,1), m(3,2,1)*m(5,3,0), m(3,2,0)*m(5,3,1), m(3,2,0)*m(5,3,0)}, m(3,3,0)+m(1,2,0), m(3,4,0)+m(2,1,0)} = -185 (m(3,3,0)+m(1,2,0))

m(4,5)={m(4,1)op(5)m(5,4)m(4,2)op(1)m(1,3)m(4,3)op(2)m(2,2)m(4,4)op(3)m(3,1)m(4,5) = \begin{cases} m(4,1)op(5)m(5,4)\\ m(4,2)op(1)m(1,3)\\ m(4,3)op(2)m(2,2)\\ m(4,4)op(3)m(3,1) \end{cases}m(4,5)=⎩⎪⎪⎪⎨⎪⎪⎪⎧​m(4,1)op(5)m(5,4)m(4,2)op(1)m(1,3)m(4,3)op(2)m(2,2)m(4,4)op(3)m(3,1)​

op(5) = “*”
op(1) = “+”
op(2) = “+”
op(3) = “+”
m(4,5,1) = max{max{m(4,1,1)*m(5,4,1), m(4,1,1)*m(5,4,0), m(4,1,0)*m(5,4,1), m(4,1,0)*m(5,4,0)}, m(4,2,1)+m(1,3,1), m(4,3,1)+m(2,2,1), m(4,4,1)+m(3,1,1)} = 40 (m(4,1,1)*m(5,4,1))
m(4,5,0) = min{min{m(4,1,1)*m(5,4,1), m(4,1,1)*m(5,4,0), m(4,1,0)*m(5,4,1), m(4,1,0)*m(5,4,0)}, m(4,2,0)+m(1,3,0), m(4,3,0)+m(2,2,0), m(4,4,0)+m(3,1,0)} = -86 (m(4,2,0)+m(1,3,0))

m(5,5)={m(5,1)op(1)m(1,4)m(5,2)op(2)m(2,3)m(5,3)op(3)m(3,2)m(5,4)op(4)m(4,1)m(5,5) = \begin{cases} m(5,1)op(1)m(1,4)\\ m(5,2)op(2)m(2,3)\\ m(5,3)op(3)m(3,2)\\ m(5,4)op(4)m(4,1) \end{cases}m(5,5)=⎩⎪⎪⎪⎨⎪⎪⎪⎧​m(5,1)op(1)m(1,4)m(5,2)op(2)m(2,3)m(5,3)op(3)m(3,2)m(5,4)op(4)m(4,1)​

op(1) = “+”
op(2) = “+”
op(3) = “+”
op(4) = “+”
m(5,5,1) = max{m(5,1,1)+m(1,4,1), m(5,2,2)+m(2,3,1), m(5,3,1)+m(3,2,1), m(5,4,1)+m(4,1,1)} = 14 (m(5,1,1)+m(1,4,1))
m(5,5,0) = min{m(5,1,0)+m(1,4,0), m(5,2,0)+m(2,3,0), m(5,3,0)+m(3,2,0), m(5,4,0)+m(4,1,0)} = 14 (m(5,1,0)+m(1,4,0))

至此,终于计算完毕,那么:
max = max{m(1,5,1), m(2,5,1), m(3,5,1), m(4,5,1), m(5,5,1)} = 40
max = min{m(1,5,0), m(2,5,0), m(3,5,0), m(4,5,0), m(5,5,0)} = -240

最后,是Java代码的实现过程

Java代码实现

package PolygonGame;public class PolygonGame {static int n;  // 边和点个数static int minf, maxf; static int[] v;  // 点集static char[] op;  // 边集static int[][][] m;  // 存放最终计算结果static int[] result;  // 存放最大值和最小值public static void main(String[] args) {n = 4;// 我的案例是: + -7 + 4 * 2 * 5v = new int[] {Integer.MIN_VALUE, -7, 4, 2, 5};op = new char[] {' ', '+', '+', '*', '*'};m = new int[n + 1][n + 1][2];for (int i = 1; i <= n; i++) {// m[i][j][1] 表示起点为i,长度为j的最大值m[i][1][1] = v[i];// m[i][j][0] 表示起点为i,长度为j的最小值m[i][1][0] = v[i];}polyMax();System.out.println("最大值: " + result[0] + "\n最小值: " + result[1]);}/*** * @param i: 链的起点* @param s: 断开位置* @param j: 链的长度*/public static void minMax(int i, int s, int j) {int[] e = new int[n + 1];// 在op(i+s) 处进行分割int a = m[i][s][0],  // 左半部分最小值b = m[i][s][1],  // 左半部分最大值r = (i + s - 1) % n + 1,  // 取余,防止溢出c = m[r][j - s][0],  // 右半部分最小值d = m[r][j - s][1];  // 右半部分最大值if(op[r] == '+') {// 对符号进行判断,加号和乘号的处理方式不同minf = a + c;maxf = b + d;} else {// 为乘号// maxf=max{ac, ad, bc, bd}// minf=min{ac, ad, bc, bd}e[1] = a * c;e[2] = a * d;e[3] = b * c;e[4] = b * d;minf = e[1];maxf = e[1];for (int k = 2; k < 5; k++) {// 查找最大最小值if (minf > e[k])minf = e[k];if (maxf < e[k])maxf = e[k];}}}public static void polyMax() {for(int j = 2; j <= n; j++)  // 总长度遍历for(int i = 1; i <= n; i++)for(int s = 1; s < j; s++) {  // 断开位置// 求m[i][j][1]和m[i][j][0]minMax(i, s, j);if(m[i][j][0] > minf)m[i][j][0] = minf;if(m[i][j][1] < maxf)m[i][j][1] = maxf;}result = new int[2];result[0] = m[1][n][1];result[1] = m[1][n][0];for(int i = 1; i <= n; i++) {if (result[0] < m[i][n][1]) result[0] = m[i][n][1];if (result[1] > m[i][n][0]) result[1] = m[i][n][0];}}
}
最大值: 33
最小值: -35

好了,到此结束。欢迎大家关注我

超超超超级详细的多边形游戏问题分析(动态规划)相关推荐

  1. 动态规划多边形游戏c语言,动态规划-多边形游戏问题

    1.描述:有一个由n个顶点构成的多边形.每个顶点被赋予一个整数值,每条边被赋予一个运算符"+"或"*".所有边依次用整数从1到n编号. 游戏第1步,将一条边删除 ...

  2. java实现多边形游戏问题_动态规划-多边形游戏

    算法思想:动态规划 实际问题:多边形游戏 编写语言:Java 前言 多边形游戏问题是矩阵连乘的最优计算次序问题与凸多边形最优三角剖分问题的推广.我在解决凸多边形最优三角剖分问题时偶然间看到了这个结论, ...

  3. 史上超级详细:HashMap源码分析,你了解到源码的魅力了嘛

    ##HashMap1.8和1.8之前的源码差别很大 目录 简介 数据结构 类结构 属性 构造方法 增加 1.HashMap简介 HashMap基于哈希表的Map接口实现,是以key-value存储形式 ...

  4. 超级详细配置SSM (Intellij idea + Maven + Spring + SpringMVC + MyBatis + c3p0 )

    时间2018/12/31,使用的包都是最新的和用的人最多的QAQ. Maven仓库查找包的地址 https://mvnrepository.com/ 在经历了70多个小时的奋斗后(花了60个小时学习了 ...

  5. 超详细图文教程:3DS Max 中创建低多边形游戏长剑模型-下部

    推荐: NSDT场景编辑器助你快速搭建可二次开发的3D应用场景 在由两部分组成的教程的第一部分中,我向您展示了如何: 剑柄建模 为剑的护手建模 剑刃建模 在本教程系列的第二部分中,我将向您展示如何: ...

  6. 超经典超好玩的光枪游戏,强烈推荐!

    死亡之屋2&3合集,死亡之屋:过度杀戮,幽灵小队,生化危机暗黑编年史.生化危机安布雷拉历代记,死亡空间:撤离,林克的弓箭训练!都是超经典超好玩的光枪游戏,强烈推荐! null 转载于:http ...

  7. 超全超详细的HTTP状态码大全

    超全超详细的HTTP状态码大全 本部分余下的内容会详细地介绍 HTTP 1.1中的状态码.这些状态码被分为五大类: 100-199 用于指定客户端应相应的某些动作. 200-299 用于表示请求成功. ...

  8. linux命令行开头是sh,shell脚本语言的使用(超全超详细)

    1.shell的概述 shell 是一种脚本语言 脚本:本质是一个文件,文件里面存放的是 特定格式的指令,系统可以使用脚本解析器 翻译或解析 指令 并执行(它不需要编译) shell 既是应用程序 又 ...

  9. ensp启动设备蓝屏_超全超详细的电脑蓝屏问题解决方案汇总

    生活太难了!每天搬砖已经够不容易,电脑还作妖: 设计图还差最后一个图层,蓝屏了!!财务工资表格马上统计完,蓝屏了?!熬了一宿马上写完1万字稿件,蓝屏了- 今天,我就带大家轻松搞定蓝屏. 什么是蓝屏 蓝 ...

最新文章

  1. MPLS自身的优点所带来的网络便捷—Vecloud微云
  2. Mardown(或Latex)换行
  3. linux下git修改密码后无法使用,git push后账号密码输出错误和修改
  4. 树莓派安装ArchLinux
  5. Android之 Fragment
  6. 前端学习(2062):vue的option选项
  7. lntellijidea怎么创建文件_DBC文件到底是个啥
  8. android jackson 解析json字符串,一文搞定Jackson解析JSON数据
  9. 《Unix网络编程(第3版)》代码编译的一些问题
  10. mysql 断言,mysql触发器模拟断言
  11. 电容篇-电容器件工作原理及参数分析理解
  12. vue-cli 脚手架安装
  13. Linux内核中常见内存分配函数
  14. echarts南丁格尔玫瑰图每块单独设置颜色
  15. 短信验证码接收不到原因分析和解决方案分析
  16. 定义变量byte a = (byte)128输出a的结果
  17. 消毒碗柜行业市场经营管理及未来前景展望分析
  18. Android adb push后相册没有立马更新,需要刷新media库
  19. 乐刻运动 app android,乐刻运动app_乐刻运动手机最新版v1.0
  20. 理解和正确使用Java中的断言(assert)

热门文章

  1. 装机员万能驱动(oem自定义logo,链接等)发布了!!!
  2. 如何实现消息功能_微信群管理软件如何加强消息管理?精细化管理怎么实现?...
  3. 计算机知识传播策划书,计算机学院硬件知识讲座活动策划书
  4. java enumeration 创建_Java Enumeration接口 - Java 教程 - 自强学堂
  5. python影视数据爬虫sqlite源码+论文(完整版和简洁版)
  6. RISC-V学习笔记【执行】
  7. 航天五院待遇2011zz
  8. 前端 - JavaScript(基础语法)
  9. FZU 2238 Daxia Wzc's problem
  10. 可视化的工业互联网 3D 展示