![](https://img-blog.csdnimg.cn/20201014180756757.png?x-oss-process=image/resize,m_fixed,h_64,w_64)
算法竞赛入门
JanFangZ
坚持,坚持就好了!
展开
-
暴力求解法_隐式图搜索(埃及分数,倒水问题,八数码问题)
隐式图搜索题目:输入:输出:code:隐式数的遍历埃及分数题目:使用单位分数的和(如1/a,a是自然数)表示一切有理数。例如2/3 = 1/2 + 1/6,但不允许2/3 = 1/3 + 1/3,因为在加数中不允许有相同的。对于一个分数a/b,表示方法有很多种,其中加数少的比加数多的号,如果加数个数相同,则最小的分数越大越好。例如,19/45 = 1/5 + 1/6 + 1/18是最优方案。输入整数原创 2017-08-08 11:31:46 · 463 阅读 · 0 评论 -
高效算法设计_递归与分治(贷款,最大值最小化)
贷款题目:一次向银行借a元钱,分b月还清。如果需要每月还c元,月利率是多少(按复利率计算)?例如借2000元,分4个月每月还510,则月利率为0.797%。答案应不超过100%。输入:2000 4 510输出:0.797%思路:设月利率为x,则第一个月还钱后还需还a(1+x)-c,重复b个月后可以得到方程。利用f(x)和0的关系与x和方程解x0的大小关系等价。 (虽然现对分治还是搞不懂原创 2017-08-14 09:29:58 · 546 阅读 · 2 评论 -
动态规划初步_数字三角形(递归,递推,数字化搜索)
题目:给出了一个数字三角形,请编写一个程序,计算从顶至底的某处的一条路径,使该路径所经过的数字的总和最大。(1)每一步可沿左斜线向下或右斜线向下 (2)1 < 三角形行数 < 100 (3)三角形数字为0,1,…99输入:573 88 1 02 7 4 44 5 2 6 5输出:34递归计算思路:不断的进行递归运算,找出左右子树最大值,再带入。#include <stdio.h>原创 2017-08-20 10:47:08 · 233 阅读 · 0 评论 -
暴力求解法_简单枚举(除法,最大乘积法,分数拆分,双基回文数)
简单枚举1 除法题目:输入正整数n,按从小到大输出所有形如abcde/fghij=n的表达式。其中a~j为0~9的一个排列,2=输入:62输出:79546/01283=6294736/01528=62code:#include <stdio.h>#include<string.h>int main() { int i,j,n,s1,s2,flag[10]; while(sc原创 2017-08-06 19:48:22 · 665 阅读 · 0 评论 -
函数和递归(组合数,孪生素数,用指针实现变量交换,求解二院一次方程组)
函数和递归(组合数,孪生素数,用指针实现变量交换,求解二院一次方程组)原创 2017-07-31 19:57:37 · 364 阅读 · 0 评论 -
数组和字符串(分数统计_stat,单词的长度,乘积的末3位,计算器,旋转_rotate,进制转换1_base1,进制转换2_base2,手机键盘)
关于C语言字符串别人家的整理scanf和gets的区别字符串输入的方法scanf(“%s”,in_buff);gets(in_buff);fgets(in_buff,BUFFER_SIZE + 1,stdin);1.当使用scanf函数时,如果在数组范围内有空格,那么第一个空格之后的字符将被忽略,这通常不是我们想要的。另外,scanf函数也不提供对写入数组的数据是否越界的检查。 2.原创 2017-07-30 20:50:29 · 396 阅读 · 0 评论 -
高效算法设计_递归与分治(棋盘覆盖问题,循环日程表,巨人与鬼)
递归与分治棋盘覆盖问题题目:有一个2^k*2^k的方格棋盘,恰有一个方格是黑色的,其他为白色。你的任务是用包含3个方格的L型牌覆盖所有白色方格。黑色方格不能被覆盖,且任意一个白色方格不能同时被两个或更多牌覆盖。下面是L型牌的4种旋转方式。原创 2017-08-12 21:05:50 · 476 阅读 · 0 评论 -
高效算法设计(二分查找,范围统计)
二分查找二分查找一般写成非递归形式,输入数组,使用sort函数将数组排序。如果由多个相同的数,返回第一个数(lowerBound)。如果不存在,返回下标i,使i和i以后的往右移动。输入:81 9 6 3 4 7 9 0381 9 6 3 4 7 9 05输出:24#include <stdio.h>#include<algorithm>#define MAXSIZE 102原创 2017-08-12 20:51:24 · 254 阅读 · 0 评论 -
高效算法设计(二分查找,范围统计)
二分查找二分查找一般写成非递归形式,输入数组,使用sort函数将数组排序。如果由多个相同的数,返回第一个数(lowerBound)。如果不存在,返回下标i,使i和i以后的往右移动。输入:81 9 6 3 4 7 9 0381 9 6 3 4 7 9 05输出:24#include <stdio.h>#include<algorithm>#define MAXSIZE 102原创 2017-08-12 20:48:58 · 501 阅读 · 0 评论 -
基础题目选解+数据结构基础
发现没什么人访问博客园,特地友情链接一下博客园写的东西。总的总的基础题目选解排序和检索 6174问题 字母重排数学基础 1 cantor的数表 2 因子和阶乘 3 果园里的树 4 多少块土地数据结构基础栈和队列 卡片游戏 铁轨链表 移动小球 对比测试二叉树 小球落下 层次遍历 二叉树重建图 黑白图像 走迷宫原创 2017-08-06 10:44:49 · 253 阅读 · 0 评论 -
暴力求解法_枚举排列(生成1~n 的排列,生成可重集的排列,下一个排列)
枚举排列生成1~n 的排列题目:输入整数n,按字典从小到大的顺序输出前n个数的所有排列。两个序列的大小关系等价于从头开始第一个不相同位置处的大小关系。输入:3输出:(1 2 3)(1 3 2)(2 1 3)(2 3 1)(3 1 2)(3 2 1)code:#include <stdio.h>int A[1001];void print_permutation(int n,int原创 2017-08-07 10:31:14 · 689 阅读 · 0 评论 -
暴力求解法_子集生成(增量构造法,位向量法,二进制法)
子集生成子集生成算法:给定一个一级和,枚举它的所有可能的子集。输入:4输出:增量构造法第一种思路是一次选出一个元素放到集合中code:#include <stdio.h>int A[1010];void print_subset(int n,int* A,int cur){ int flag=0; for(int i=0;i<cur;i++)//打印当前集合 {原创 2017-08-07 16:04:47 · 485 阅读 · 0 评论 -
暴力求解法_回溯法(八皇后问题,素数环,困难的串)
回溯法素数环题目:输入整数n,把整数1,2,3…,n组成一个环,使得相邻的整数之和为素数。输出时从整数n开始逆时针输出排列。同一个环应该恰好输出一次。输入:6输出:1 4 3 2 5 6 1 6 5 2 3 4 首先回顾素数的判断,将每个数循环一遍判断是否为素数,如果为素数就在标记数组isp对应的位置输出1,如果不是则为0。接着是打印过程,以cur==n && isp[A[0]+A[n-1]]原创 2017-08-08 09:37:37 · 442 阅读 · 0 评论 -
高效算法设计_再谈排序和检索(归并排序,逆序数对)
归并排序上一个分治法的扩展 划分:把序列分成元素个数尽量相等的两半。 递归求解:把两半的元素分别排序 合并:把两个有序表合并成一个输入:81 2 12 11 9 7 13 20输出:1 2 7 9 11 12 13 20#include <stdio.h>#define MAXSIZE 1024void merge_sort(int *A,int x,int y,int原创 2017-08-11 09:17:14 · 243 阅读 · 0 评论 -
高效算法设计_算法分析初步(最大连续和)
算法分析初步渐进时间复杂度 基本操作的数量往往可以写成关于“输入模式二”的表达式,保留最大象并忽略系数后的表达式称为算法的渐进时间复杂度。最大连续和六种姿势拿下最大序列和 嗯。。。我们三种就够折腾了。题目:给出一个长度为n的序列A1,A2,…..,An,求最大连续和。输入:6-2 11 -4 13 -5 -2输出:201 O(n^3)使用三次循环,计算每一个序列和的大小,然后和bes原创 2017-08-10 19:22:19 · 212 阅读 · 0 评论 -
暴力求解法_隐式图搜索(八数码问题)
八数码问题题目:编号为1~8的8个正方形被摆成3行3列(由一个格子留空),每次可以把与空格相邻的滑块(有公共边相邻才算)移到空格,而它原来的位置就成为了新的空格。给定初始局面和目标局面(用0表示空格),你的任务是计算出最少移动步数。如果无法达到,则输出-1。输入:2 6 4 1 3 7 0 5 88 1 5 7 3 6 4 0 2输出:31映射(编码和解码)第一种方法:把排列“变成”整数,然后原创 2017-08-09 19:16:53 · 468 阅读 · 0 评论 -
高效算法设计_贪心法(最优装载问题,部分背包问题,乘船问题)
二分查找二分查找一般写成非递归形式,输入数组,使用sort函数将数组排序。如果由多个相同的数,返回第一个数(lowerBound)。如果不存在,返回下标i,使i和i以后的往右移动。输入:81 9 6 3 4 7 9 0381 9 6 3 4 7 9 05输出:24#include <stdio.h>#include<algorithm>#define MAXSIZE 102原创 2017-08-14 17:34:41 · 1692 阅读 · 0 评论