摘要:
动态规划三大重要概念:最优子结构,边界,状态转移公式(问题规模降低,如问题由 n 的规模降低为 n−1 或 n−2 及二者之间的关系);0. 爬台阶F(n)⇒F(n−1)+F(n−2)F(n−1),F(n−2) 即是 F(n) 的最优子问题;F(1)=1,F(2)=2... 阅读全文
摘要:
动态规划三大重要概念:最优子结构,边界,状态转移公式(问题规模降低,如问题由 n 的规模降低为 n−1 或 n−2 及二者之间的关系);0. 爬台阶F(n)⇒F(n−1)+F(n−2)F(n−1),F(n−2) 即是 F(n) 的最优子问题;F(1)=1,F(2)=2... 阅读全文
摘要:
实现:(nm)既需要计算组合的总数 (32)=3;也需要分别获得每一种组合的情形,用于穷举搜索; 1, 2; 1, 3; 2, 31. 递归实现// picked + toPick == mvoid comb(int n, vector& picked, int to... 阅读全文
摘要:
实现:(nm)既需要计算组合的总数 (32)=3;也需要分别获得每一种组合的情形,用于穷举搜索; 1, 2; 1, 3; 2, 31. 递归实现// picked + toPick == mvoid comb(int n, vector& picked, int to... 阅读全文
摘要:
当算法问题给出时,其实也就相当于给出了函数的输入和输出,也就是整个函数的接口形式。比如通配符范式与字符串的匹配问题, bool match(const string& patterns, const string& str);一些特殊情况一定要考虑周全(if, if,... 阅读全文
摘要:
当算法问题给出时,其实也就相当于给出了函数的输入和输出,也就是整个函数的接口形式。比如通配符范式与字符串的匹配问题, bool match(const string& patterns, const string& str);一些特殊情况一定要考虑周全(if, if,... 阅读全文
摘要:
不要重复制造轮子,而且你造的轮子未必比得上别人的;⇒ accumulate,累积容器中区间的和,可以指定初值;为什么 STL 中的容器和算法一定关于区间的操作一定是左闭右开的呢?int A[n]; ⇒ sort(A, A+n);vector ⇒ sort(A.b... 阅读全文
摘要:
不要重复制造轮子,而且你造的轮子未必比得上别人的;⇒ accumulate,累积容器中区间的和,可以指定初值;为什么 STL 中的容器和算法一定关于区间的操作一定是左闭右开的呢?int A[n]; ⇒ sort(A, A+n);vector ⇒ sort(A.b... 阅读全文