算法
knaha
这个作者很懒,什么都没留下…
展开
-
partition算法---主元素问题---分治
问题描述主元素是一组n个数中出现次数大于n/2的数。求一个数组中的主元素。partition算法取数组中的一个数,将数组分成两部分(比它大和比它小),再接着在子问题中求解。这是一个常用的算法(以后还会补充)。代码#include <iostream>#include <string>#include <algorithm>using namespace std;int n;int mode(int * array,int l,int r,int原创 2020-06-07 17:53:30 · 489 阅读 · 0 评论 -
整数因子分解---分治递归
问题描述大于1的整数n可以分解为:n = x1 * x2 * … * xn对于给定的正整数n,编程计算n共有多少种不同的分解式,并打印出所有形式。代码(还没能打印出所有形式)#include <stdio.h>#include <stdlib.h>int count;void solve(int n){ int i; if(n == 1){//当商为1时,得到一种分解 //printf("\n"); count++; }原创 2020-06-07 17:47:07 · 1234 阅读 · 0 评论 -
删数问题---动态规划
问题描述n个正整数,两端的整数不能删除,其他的正整数可以删除,且其得分是本数同左右邻居相乘的结果,求除两端外的所有数删除后的最大得分。如 1 2 3,删除2后得分是6。递归定义dp[i][j] = dp[i][k] + dp[k][j] + a[i]*a[k]*a[j] )最优值:dp[i][j] = max ( dp[i][j] , dp[i][k] + dp[k][j] + a[i]*a[k]*a[j] )假设最后删掉第k个数得到的结果最大,总分是k左右两端的数之和与最后一次的得分相加。#原创 2020-06-07 17:38:04 · 1163 阅读 · 0 评论 -
数字塔---动态规划
问题描述从顶部出发,走到底层,找出一条路径使得数字和最大。代码实现#include <stdio.h>#include <iostream>using namespace std;int dtower(int** a, int** s, int n) { //cout << "dtower" << endl; int ...原创 2020-04-02 20:40:04 · 911 阅读 · 0 评论 -
斐波那契数列--备忘录--递推--递归
备忘录法#include <iostream>using namespace std;int memo[1000] = { 0 };int fib(int i) { if (i == 1 || i == 2) { memo[i] = 1; return memo[i]; } if (i > 2) { ...原创 2020-04-02 20:23:08 · 901 阅读 · 0 评论 -
C---埃氏筛&分解因子法求最大公因数
埃氏筛法的思想判断当前位置的数是否为素数,如果是,则以该数为因子的所有数均标记为合数(筛除掉 ),判断到√n的位置即可,n为数组总长度。最终剩下的未筛除的数即为素数。#include<iostream>#include<stdio.h>#include<math.h>//sqrt()函数所在头文件using namespace std;#defin...原创 2020-03-15 20:30:50 · 465 阅读 · 2 评论 -
矩阵连乘---动态规划
回顾分治法当问题规模很小时容易求解问题可分为子问题子问题的解可合起来得到问题的解子问题相互独立动态规划适用的问题前三点和分治法相同,不同的是应用动态规划求解的题一般子问题之间不独立,需要辅助空间记录子问题的值来减少求解次数基本步骤:1.找出最优解的性质,并描述其结构特征(最优子结构性质)(由子问题的最优解可以得到整个问题的最优解)2.递归地定义最优值3.以自底向上的方式计...原创 2020-03-11 12:01:44 · 446 阅读 · 0 评论 -
双递归--二分快速幂--二分查找
双递归https://www.cnblogs.com/pengyingh/articles/2516220.htmlhttps://blog.csdn.net/yizhangbiao/article/details/50839917#include <stdio.h>int f(int i,int j){ int a[9][9]={0}; int k; for(k=1;...原创 2019-07-09 21:15:03 · 160 阅读 · 0 评论 -
循环赛日程表--分治--递推&递归
设有n=2^k个运动员要进行网球循环赛。现要设计一个满足以下要求的比赛日程表:(1)每个选手必须与其他n-1个选手各赛一次;(2)每个选手一天只能参赛一次;(3)循环赛在n-1天内结束。请按此要求将比赛日程表设计成有n行和n-1列的一个表。在表中的第i行,第j列处填入第i个选手在第j天所遇到的选手。其中1≤i≤n,1≤j≤n-1。8个选手的比赛日程表如下图:递归法#include&l...原创 2019-07-09 17:27:42 · 3344 阅读 · 0 评论