![](https://img-blog.csdnimg.cn/20201014180756927.png?x-oss-process=image/resize,m_fixed,h_64,w_64)
算法
Tinukso
这个作者很懒,什么都没留下…
展开
-
最大子段和(动态规划)
给定由n个整数(可能有负整数)组成的序列(a1,a2,…,an),最大子段和问题要求该序列形如的最大值(1<=i<=j<=n),当序列中所有整数均为负整数时,其最大子段和为0。#include <stdio.h>#include<iostream>using namespace std;const int N = 8;int main(){ int n,arr[N]; cout<<"请输入数组大小:"; cin>>n; c原创 2021-01-04 22:40:10 · 438 阅读 · 0 评论 -
最长回文子序列
动态规划思想对于任意字符串,如果头尾字符相同,那么字符串的最长子序列等于去掉首尾的字符串的最长子序列加上首尾;如果首尾字符不同,则最长子序列等于去掉头的字符串的最长子序列和去掉尾的字符串的最长子序列的较大者。因此动态规划的状态转移方程为:设字符串为str,长度为n,p[i][j]表示第i到第j个字符间的子序列的个数(i<=j),则:状态初始条件:dp[i][i]=1 (i=0:n-1)状态转移方程:dp[i][j]=dp[i+1][j-1] + 2if(str[i]==str[j])dp原创 2020-12-26 19:36:19 · 72 阅读 · 0 评论 -
工作分配问题
设有n件工作分配给n个人。将工作i分配给第j个人所需的费用为cij 。 设计一个算法,对于给定的工作费用,为每一个人都分配1 件不同的工作,并使总费用达到最小。输入格式:输入数据的第一行有1 个正整数n (1≤n≤20)。接下来的n行,每行n个数,表示工作费用。输出格式:将计算出的最小总费用输出到屏幕。输入样例:在这里给出一组输入。例如:310 2 32 3 43 4 5输出样例:在这里给出相应的输出。例如:9解题思路:由于每个人都必须分配到工作,在这里可以建一个二维数组c原创 2020-12-17 23:59:31 · 286 阅读 · 0 评论 -
回溯算法
1.概念回溯算法实际上一个类似枚举的搜索尝试过程,主要是在搜索尝试过程中寻找问题的解,当发现已不满足求解条件时,就“回溯”返回,尝试别的路径。回溯法是一种选优搜索法,按选优条件向前搜索,以达到目标。但当探索到某一步时,发现原先选择并不优或达不到目标,就退回一步重新选择,这种走不通就退回再走的技术为回溯法,而满足回溯条件的某个状态的点称为“回溯点”。许多复杂的、规模较大的问题都可以使用回溯法,有“通用解题方法”的美称。2.基本思想在包含问题的所有解的解空间树中,按照深度优先搜索的策略,从根结点出发深原创 2020-12-15 21:25:25 · 73 阅读 · 0 评论 -
最优服务次序问题
问题描述:设有n个顾客同时等待一项服务,顾客i需要的服务时间为ti,(1<=i<=n)。应如何安排n个顾客的服务次序才能使平均等待时间达到最小?(平均等待时间是n个顾客等待服务时间总和除以n)输入:第一行为一个正整数n,表示有n个顾客第二行为n个正整数,表示n个顾客需要的服务时间输出:最小平均等待时间。#include<iostream>#include<algorithm>using namespace std;int main(){ int n,a[原创 2020-12-10 16:17:24 · 716 阅读 · 0 评论 -
月饼
月饼是中国人在中秋佳节时吃的一种传统食品,不同地区有许多不同风味的月饼。现给定所有种类月饼的库存量、总售价、以及市场的最大需求量,请你计算可以获得的最大收益是多少。注意:销售时允许取出一部分库存。样例给出的情形是这样的:假如我们有 3 种月饼,其库存量分别为 18、15、10 万吨,总售价分别为 75、72、45 亿元。如果市场的最大需求量只有 20 万吨,那么我们最大收益策略应该是卖出全部 15 万吨第 2 种月饼、以及 5 万吨第 3 种月饼,获得 72 + 45/2 = 94.5(亿元)。输入格式原创 2020-12-09 09:41:50 · 159 阅读 · 0 评论 -
Fibonacci数列
无穷数列1,1,2,3,5,8,13,21,34,55,……,称为Fibonacci数列。它可以递归地定义为:第n个Fibonacci数可递归地计算如下:int fibonacci(int n){if (n <= 1) return 1;return fibonacci(n-1)+fibonacci(n-2);}1)编写完整的主函数,分别记录利用上述递归函数求第47, 48, 49, 50, 51,52个Fibonacci数所花费的时间。#include<stdio.h>原创 2020-11-29 21:50:55 · 188 阅读 · 0 评论 -
半数集问题
问题描述:给定一个自然数n,由n开始可以依次产生半数集set(n)中的数如下:(1) ;(2) 在n的左边加上一个自然数,但该自然数不能超过最近添加的数的一半;(3) 按此规则进行处理,直到不能再添加自然数为止。例如,set(6)={6,16,26,126,36,136},半数集set(6)中有6个元素。输入:整数n(0<n<1000)输出:半数集set(n)中的元素个数。请设计递归函数,求出set(n)的个数,并分析算法时间复杂度,对算法进行改进,用程序验证递归算法,以及改进之后原创 2020-11-28 21:10:23 · 102 阅读 · 0 评论 -
memset函数
每种类型的变量都有各自的初始化方法,memset() 函数可以说是初始化内存的“万能函数”,通常为新申请的内存进行初始化工作。它是直接操作内存空间,mem即“内存”(memory)的意思。该函数的原型为# include <string.h>void *memset(void *s, int c, unsigned long n);函数的功能是:将指针变量 s 所指向的前 n 字节的内存单元用一个“整数” c 替换,注意 c 是 int 型。s 是 void* 型的指针变量,所以它可以为原创 2020-11-26 16:45:49 · 441 阅读 · 0 评论 -
改写二分搜索算法
题目来源:《计算机算法设计与分析》,王晓东设a[0:n-1]是已排好序的数组,请改写二分搜索算法,使得当x不在数组中时,返回小于x的最大元素位置i和大于x的最小元素位置j。当搜索元素在数组中时,i和j相同,均为x在数组中的位置。输入格式:输入有两行:第一行是n值和x值; 第二行是n个不相同的整数组成的非降序序列,每个整数之间以空格分隔。输出格式:输出小于x的最大元素的最大下标i和大于x的最小元素的最小下标j。当搜索元素在数组中时,i和j相同。 提示:若x小于全部数值,则输出:-1 0 若x大于全原创 2020-11-25 23:50:15 · 242 阅读 · 0 评论 -
由0到4五个数字,组成5位数,每个数字用一次,但十位和百位不能为3(当然万位不能为0),输出所有可能的五位数。
#include<stdio.h>void main(){int a,b,c,d,e,n=0,h;for(a=1;a<=4;++a){for(b=0;b<=4;++b){for(c=0;c<=4;++c){for(d=0;d<=4;++d){for(e=0;e<=4;++e){if(ab||bc||cd||de||d3||c3||ac||ad||ae||bd||be||ce)h=h+1;else{printf("%d%d%d%d%d “,a,原创 2020-11-22 23:02:23 · 441 阅读 · 0 评论 -
分别用穷举法和欧几里德算法实现求两个整数的最大公约数,并比较算法的效率。
#include<stdio.h>int a,b;void fuction1(int a,int b){ int t; for(int i=1;i<=a;i++) if(a%i==0&&b%i==0) t=i; printf("穷举法求得的最大公约数为:%d\n",t);}void fuction2(int a,int b){ int c; while(b!=0) { c=a%b; a=b; b=c; } printf("欧几里原创 2020-11-15 22:29:30 · 517 阅读 · 0 评论 -
C++排序函数sort()
sort()对给定区间所有元素进行排序要使用此函数只需用#include sort即可使用,语法描述为:sort(begin,end),表示一个范围,例如:int main(int argc, _TCHAR* argv[]){ int a[20]={2,4,1,23,5,76,0,43,24,65},i; for(i=0;i<20;i++) cout<<a[i]<<endl; sort(a,a+20); for(i=0;i<20;i++) cou原创 2020-11-11 16:59:41 · 236 阅读 · 0 评论