C++算法
文章平均质量分 76
mypollyanna
请大家多多指正
展开
-
动态规划(一) 数塔,嵌套矩形问题
1 数塔问题1.1 思路 把每一个点看成一个状态,即从每个状态开始到达终点的最大值称为它的状态值,由此可见,每一个点的最大值,与它所连的两个点的状态值的大小密切相关。对此,我们引出一个方程。状态转移方程:d(i, j) = a(i, j) + max{d(i + 1, j), d(i + 1, j + 1)}1.2 解决方法方法一:递归计算int solve(int i, in原创 2017-02-07 17:00:42 · 867 阅读 · 0 评论 -
动态规划(二) 硬币问题
2.2 硬币问题2.2.1 问题简述:有n种硬币,每种都有无限多,要求最少或最多选用几个硬币,能凑出给定整数。2.2.2 问题分析:与嵌套矩形不同的是,硬币问题是一个确定中点的最长路和最短路问题。要注意,该问题可能无解。2.2.3 关键代码int dp(int S){ if(vis[S]) return d[S]; vis[S] = 1; int &ans = d[S];原创 2017-02-12 17:16:54 · 910 阅读 · 1 评论 -
熄灯问题——枚举
1 问题描述有一个由按钮组成的矩阵,其中每行有6个按钮,共5行。每个按钮的位置上有一盏灯。当按下一个按钮后,该按钮以及周围位置(上边、下边、左边、右边)的灯都会改变一次。即,如果灯原来是点亮的,就会被熄灭;如果灯原来是熄灭的,则会被点亮。在矩阵角上的按钮改变3盏灯的状态;在矩阵边上的按钮改变4盏灯的状态;其他的按钮改变5盏灯的状态。请你写一个程序,确定需要按下哪些按钮,恰好使得所有的灯都熄灭。原创 2017-03-04 16:31:42 · 650 阅读 · 0 评论 -
汉诺塔问题
汉诺塔问题有三根针A,B,C。A针上有n个盘子,盘子大小不等,大的在下,小的在上,要求把这n个盘子从A针移到C针,在移动过程中可借助B针,每次只允许移动一个盘,且在移动过程中在三根针上都保持大盘在下,小盘在上。分析:整个过程包括三个步骤,(1)将A上n-1个盘子移到B上(借助C针)(2)将A针上剩下的一个盘子移到C针上(3)将n-1个盘子从B针移到C针上(借助A针)即每原创 2016-08-17 22:13:08 · 818 阅读 · 0 评论 -
递归 N皇后问题 逆波兰表达式
N皇后问题1 问题描述在n×n格的棋盘上放置彼此不受攻击的n个皇后。按照国际象棋的规则,皇后可以攻击与之处在同一行或同一列或同一斜线上的棋子。n后问题等价于再n×n的棋盘上放置n个皇后,任何2个皇后不妨在同一行或同一列或同一斜线上。要求输出所有的放置方法。2 问题分析这里用递归求解,思路很简单,即从第0行开始,遍历判断每个能够放置皇后的位置,然后在确定前k行的情况下,进行第k+1行原创 2017-03-05 14:51:19 · 410 阅读 · 1 评论 -
C++表达式求值
表达式求值1 问题描述输入为四则运算表达式如(2+3)*(5+7)+9/3,仅由+ - * / ( )构成,没有空格,要求其值。2 问题分析有两种方法,一是用递归,将表达式分解为项和因子,再通过递归逐块解决。其中,我们需要清楚的是,表达式为项的加减,项为因子的乘除,因子为数值或带括号的表达式。第二种方法是通过堆栈,先将表达式转化成后缀表达式,利用栈依次求解。3 完整代码原创 2017-03-05 19:30:19 · 1598 阅读 · 0 评论