j=j<<1不同于j<<1,后者j本身不发生变化
^表示异或,pow表示乘方
字典序算法
https://algorithm.yuanbin.me/zh-hans/math_and_bit_manipulation/unique_binary_search_trees.html
[穷竭搜索]Palindrome Partitioning http://www.lintcode.com/en/problem/palindrome-partitioning/
https://leetcode.com/problems/combinations/description/
注意递归循环的建立和剪枝函数的使用位置:上两例是一个不错的模板
模板:
动态规划
动态规划问题中一般从以下四个角度考虑:
状态(State)
状态间的转移方程(Function)
状态的初始化(Initialization)
返回结果(Answer)
动规适用的情形:
最大值/最小值
有无可行解
求方案个数(如果需要列出所有方案,则一定不是动规,因为全部方案为指数级别复杂度,所有方案需要列出时往往用递归)
给出的数据不可随便调整位置
Climbing Stairs
Question
lintcode: (111) Climbing Stairs
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?
Example
Given an example n=3 , 1+1+1=2+1=1+2=3
return 3
题解
题目问的是到达顶端的方法数,我们采用序列类问题的通用分析方法,可以得到如下四要素:
State: f[i] 爬到第i级的方法数
Function: f[i]=f[i-1]+f[i-2]
Initialization: f[0]=1,f[1]=1
Answer: f[n]
\
一种vector初始化方式:
vector