算法设计与分析
皓韵儿
人一我十, 人十我百,人百我千,人千我万。
只要学不死,就往死里学。
展开
-
众数问题
所谓众数,就是对于给定的含有N个元素的多重集合,每个元素在S中出现次数最多的成为该元素的重数,多重集合S重的重数最大的元素成为众数。例如:S={1,2,2,2,3,5},则多重集S的众数是2,其重数为3。现在你的任务是:对于给定的由m个自然数组成的多重集S,计算出S的众数及其重数。思路: 以空间换时间#include #include using namespace std;in原创 2016-10-12 19:49:45 · 404 阅读 · 0 评论 -
二分,三分 分治求 a^n
//二分法求 a^n #include using namespace std;int pow2(int a, int n){ if(n == 1) return a; else if(n % 2 == 0){ return pow2(a * a, n / 2); } else if(n % 2 != 0){ return a * pow2(a * a , (n原创 2016-10-12 20:30:59 · 505 阅读 · 0 评论 -
有重复元素的排列问题
时间复杂度: n!T(n) = n * T(n - 1) + O(n);#include using namespace std;long long ans;int ok(char str[], int a, int b){ if(b > a){ for(int i = a; i < b; ++i){ // aacc 老师举的列子 if(str[i] ==原创 2016-10-12 20:51:51 · 573 阅读 · 0 评论 -
矩阵连乘问题
没有输出矩阵连乘的结果,若要输出,加一个函数,本次仅输出从哪断开求矩阵最简#include using namespace std;int m[105][105], s[105][105] ;void MatrixChain(int *p, int n){//p 每个矩阵的行和列, n 一共有多少个矩阵, m 记录最小次数, s 记录断开位置 for(int i = 1;原创 2016-10-13 20:28:39 · 394 阅读 · 0 评论 -
三角数塔问题
简单的动态规划数塔问题: 9 12 15 10 6 8 2 18 9 519 7 10 4 16有形如图所示的数塔,从顶部出发,在每一结点可以选择向左走或是向右走,一直走到底层,要求找出一条路径,使路径上的值最大。或者是从低往上走,使路径上的值最大。下面代码是从下往上走,要找到从下往上找,用数原创 2016-10-13 21:26:41 · 1082 阅读 · 0 评论 -
最长公共子序列
#include using namespace std;int n, m;char x[1005], y[1005];int c[1005][1005], b[1005][1005];//c 最长公共子序列的长度 b 由那个值得到 1 前面+1 2 上面 3 左面 void LCSlength(){ for(int i = 0; i <= n; ++i) c[原创 2016-10-13 22:11:32 · 302 阅读 · 0 评论