算法设计
cd651
这个作者很懒,什么都没留下…
展开
-
三数之和
//从键盘输入一个有n个整数的数组S,在S中找到三个整数a, b, c,找到所有使得a + b + c = 0的三元组 //O(N^2)#include<iostream>#include<algorithm>using namespace std;class sum{ int size; int *arr;public: sum(int s,int *a)原创 2017-03-21 21:48:43 · 224 阅读 · 0 评论 -
6.12-扫雷-复杂模拟
原题:清华大学2017机试样题#include<iostream>#include<stdio.h>#include<string>using namespace std;char map[1000][1000];bool flag[1000][1000]={false};bool check[1000][1000]={false};//1表示已...原创 2018-06-12 20:18:57 · 501 阅读 · 0 评论 -
5.27-权限查询-字符串操作
授权 (authorization) 是各类业务系统不可缺少的组成部分,系统用户通过授权机制获得系统中各个模块的操作权限。 本题中的授权机制是这样设计的:每位用户具有若干角色,每种角色具有若干权限。例如,用户 david 具有 manager 角色,manager 角色有 crm:2 权限,则用户 david 具有 crm:2 权限,也就是 crm 类权限的第 2 等级的权限。 具体地...原创 2018-05-27 13:04:31 · 214 阅读 · 0 评论 -
6.2-Til the Cows Come Home-dijk
Bessie is out in the field and wants to get back to the barn to get as much sleep as possible before Farmer John wakes her for the morning milking. Bessie needs her beauty sleep, so she wants to get b...原创 2018-06-02 22:22:28 · 137 阅读 · 0 评论 -
4.22-railway ticket -动态规划
总时间限制: 1000ms 内存限制: 65536kB描述 The railway line “Ekaterinburg-Sverdlovsk” with several stations has been built. This railway line can be represented as a line segment, railway station...原创 2018-04-22 18:05:07 · 374 阅读 · 0 评论 -
4.15-质因子分解-素数筛选+格式
总时间限制: 1000ms 内存限制: 65536kB描述输入一个数,输出其素因子分解表达式。输入 输入一个整数 n (2 <= n < 100)。 输出 输出该整数的因子分解表达式。 表达式中各个素数从小到大排列。 如果该整数可以分解出因子a的b次方,当b大于1时,写做 a^b ;当b等于1时,则直接写成a...原创 2018-04-15 16:46:24 · 385 阅读 · 0 评论 -
3.26-扑克牌-暴力深搜
明被劫持到X赌城,被迫与其他3人玩牌。 一副扑克牌(去掉大小王牌,共52张),均匀发给4个人,每个人13张。 这时,小明脑子里突然冒出一个问题: 如果不考虑花色,只考虑点数,也不考虑自己得到的牌的先后顺序,自己手里能拿到的初始牌型组合一共有多少种呢?#include<iostream>using namespace std;int a[15];int count=0...原创 2018-03-26 18:41:52 · 210 阅读 · 0 评论 -
3.21-分巧克力-二分查找
儿童节那天有K位小朋友到小明家做客。小明拿出了珍藏的巧克力招待小朋友们。 小明一共有N块巧克力,其中第i块是Hi x Wi的方格组成的长方形。为了公平起见,小明需要从这 N 块巧克力中切出K块巧克力分给小朋友们。切出的巧克力需要满足:1. 形状是正方形,边长是整数 2. 大小相同 例如一块6x5的巧克力可以切出6块2x2的巧克力或者2块3x3的巧克力。当然小朋友们...原创 2018-03-21 23:37:35 · 232 阅读 · 0 评论 -
3.25-垒色子-动态规划
赌圣atm晚年迷恋上了垒骰子,就是把骰子一个垒在另一个上边,不能歪歪扭扭,要垒成方柱体。 经过长期观察,atm 发现了稳定骰子的奥秘:有些数字的面贴着会互相排斥! 我们先来规范一下骰子:1 的对面是 4,2 的对面是 5,3 的对面是 6。 假设有 m 组互斥现象,每组中的那两个数字的面紧贴在一起,骰子就不能稳定的垒起来。 atm想计算一下有多少种不同的可能的垒骰子方式。 两种垒骰子方...原创 2018-03-25 21:40:14 · 233 阅读 · 0 评论 -
6.14-最少回文串划分-dp
给一个字符串, 要求把它分割成若干个子串,使得每个子串都是回文串。问最少可以分割成多少个。#include<iostream>#include<cstdio>#include<cstring>using namespace std;const int INF=0x3f3f3f3f;char str[1010];int dp[1010];bo...原创 2018-06-14 16:01:53 · 403 阅读 · 0 评论 -
7.2-优先队列
#include<iostream>#include<stdio.h>#include<queue>using namespace std;struct node{ int i,j; node(int ii,int jj) { i=ii; j=jj; } bool operator...原创 2018-07-02 15:43:08 · 205 阅读 · 0 评论 -
6.9-最大连续区间子和-dp
求一个数组中,一段连续区间的最大和。dp(i+1)=max(num[i+1], num[i+1]+dp(i));dpi表示以第i元素结尾的最大区间和。#include<iostream>using namespace std;int main(){ int n; cin>>n; int* a=new int[n+1]; a[0]=0; for(int ...原创 2019-06-09 18:44:50 · 1119 阅读 · 0 评论 -
6.8-区间最值
时间限制:3秒空间限制:131072K给定一个数组序列, 需要求选出一个区间, 使得该区间是所有区间中经过如下计算的值最大的一个:区间中的最小数 * 区间所有数的和最后程序输出经过计算后的最大值即可,不需要输出具体的区间。如给定序列 [6 2 1]则根据上述公式, 可得到所有可以选定各个区间的计算值:[6] = 6 * 6 = 36;[2] = 2 * 2 = 4;[1] = 1 *...原创 2019-06-08 19:23:33 · 201 阅读 · 0 评论 -
6.8-“最大点”-预排序
时间限制:1秒空间限制:32768KP为给定的二维平面整数点集。定义 P 中某点x,如果x满足 P 中任意点都不在 x 的右上方区域内(横纵坐标都大于x),则称其为“最大的”。求出所有“最大的”点的集合。(所有点的横坐标和纵坐标都不重复, 坐标轴范围在[0, 1e9) 内)如下图:实心点为满足条件的点的集合。请实现代码找到集合 P 中的所有 ”最大“ 点的集合并输出。输入描述:第一行输入...原创 2019-06-08 17:38:02 · 162 阅读 · 0 评论 -
6.8-娘娘站队-模拟
延禧攻略皇宫之中,乾隆皇帝嫔妃众多,分为多派,经常互相争宠,乾隆皇帝正为此发愁,他请魏璎珞替他想想办法,希望后宫之中尽可能少的分派。魏璎珞把后宫中的众多嫔妃叫来,每位嫔妃将自己要好的姐妹名字写在一张字条上。只要名单中有对方名字,就表示想与对方交好,则分在一派。例如高贵妃名单中有纯妃,纯妃名单中有富察皇后,则她们三人都会归为一派,如娴妃名单中没有任何人,其他嫔妃的名单中也没有娴妃,则娴妃...原创 2019-06-08 15:16:17 · 181 阅读 · 1 评论 -
6.7-二维数组搜索
在一个二维数组中(每个一维数组的长度相同),每一行都按照从左到右递增的顺序排序,每一列都按照从上到下递增的顺序排序。请完成一个函数,输入这样的一个二维数组和一个整数,判断数组中是否含有该整数。分析:这里需要确定搜索的方向,只能是从坐下或者右上开始游走(因为只有这样才能确保每次判断后能删除一定区域),以这种方式游走每次删除的区域是一个横条或者一个纵条。class Solution {publi...原创 2019-06-07 20:08:26 · 104 阅读 · 0 评论 -
9.9-铁路修建-双dij
编号为1到N的N个城市间有M条铁路,通过每条铁路花费时间T_i,为了减少从城市1到N的时间,现在决定将其中一条铁路改建成高铁,改建后通过该条铁路的时间将减半(向下取整数),求改建哪条铁路可以使得改建后从城市1到城市N的时间最短 输入:第一行N和M 接下来M行,每行A_i, B_i, T_i分别是第i条铁路的起点和终点,以及时间 输出:改建的铁路编号以及改建后从1到N的时间 注意:铁路是双向...原创 2018-09-09 16:36:51 · 208 阅读 · 0 评论 -
9.2-整理书架-最大上升子序列
书店管理员要把书架上的书整理一下,其实就是一排书,让书的排序是按照书的高低,每本书有一个重量,重量越大,移动书时越费力,越累,让我们求的是,总的移动书本的最小重量是多少。给出的数据是:5(书的数量)1 2 5 3 3 (表示书的高度)1 1 3 1 1 (标示书的重量)输出是2,为什么是2,因为这里只需要把第4,第5本书移动到第三本书的前面,就能够保证书的有序,移动的重量和...原创 2018-09-02 17:47:12 · 243 阅读 · 1 评论 -
8.1-line_up-dp最长递增子序列
Description In the army, a platoon is composed by n soldiers. During the morning inspection, the soldiers are required to line up in a straight line in front of the captain. The captain is not satis...原创 2018-08-01 19:05:17 · 192 阅读 · 0 评论 -
3.30-幸运数-模拟
问题描述幸运数是波兰数学家乌拉姆命名的。它采用与生成素数类似的“筛法”生成 。首先从1开始写出自然数1,2,3,4,5,6,….1 就是第一个幸运数。我们从2这个数开始。把所有序号能被2整除的项删除,变为:1 _ 3 _ 5 _ 7 _ 9 ….把它们缩紧,重新记序,为:1 3 5 7 9 …. 。这时,3为第2个幸运数,然后把所有能被3整除的序号位置的数删去。注意,...原创 2018-03-30 18:12:33 · 206 阅读 · 0 评论 -
3.14-包子凑数-欧几里得+贪心
小明几乎每天早晨都会在一家包子铺吃早餐。他发现这家包子铺有N种蒸笼,其中第i种蒸笼恰好能放Ai个包子。每种蒸笼都有非常多笼,可以认为是无限笼。每当有顾客想买X个包子,卖包子的大叔就会迅速选出若干笼包子来,使得这若干笼中恰好一共有X个包子。比如一共有3种蒸笼,分别能放3、4和5个包子。当顾客想买11个包子时,大叔就会选2笼3个的再加1笼5个的(也可能选出1笼3个的再加2笼4个的)。当然有时包...原创 2018-03-14 13:45:58 · 166 阅读 · 0 评论 -
岛屿周长
描述用一个n*m的二维数组表示地图,1表示陆地,0代表海水,每一格都表示一个1*1的区域。地图中的格子只能横向或者纵向连接(不能对角连接),连接在一起的陆地称作岛屿,同时整个地图都被海水围绕。假设给出的地图中只会有一个岛屿,并且岛屿中不会有湖(即不会有水被陆地包围的情况出现)。请判断所给定的二维地图中岛屿的周长。输入 第一行为n和m,表示地图的大小(1<=n<=100, 1<=m<=10原创 2017-10-20 23:21:10 · 630 阅读 · 0 评论 -
扩展欧几里得
欧几里得定理: gcd(a, b) = gcd(b , a%b) 当知道这个定理,求解最大公因数就可以用递归函数轻松求解。 当知道这个定理有什么用呢?现在若要求 a*x+b*y=gcd(a,b)的通解,已知一组特解(x0,y0),那么通解就可以用这组特解表示:x=x0+(b/gcd)*t y=y0-(a/gcd)*t 那么现在问题就是找到这组原创 2017-09-20 23:13:14 · 117 阅读 · 0 评论 -
贪心算法---特殊密码锁
有一种特殊的二进制密码锁,由n个相连的按钮组成(n<30),按钮有凹/凸两种状态,用手按按钮会改变其状态。然而让人头疼的是,当你按一个按钮时,跟它相邻的两个按钮状态也会反转。当然,如果你按的是最左或者最右边的按钮,该按钮只会影响到跟它相邻的一个按钮。当前密码锁状态已知,需要解决的问题是,你至少需要按多少次按钮,才能将密码锁转变为所期望的目标状态。 输入两行,给出两个由0、1组成的等长字符串,表示当原创 2017-09-28 23:07:33 · 585 阅读 · 0 评论 -
分治算法---棋盘覆盖
分治算法—-棋盘覆盖 在一个2^k*2^k组成的棋盘中若恰有一个方格与其他方格不同,则称这个方格为特殊方格,在棋盘覆盖问题中,要用不同形态的L型骨牌覆盖在一个给定的特殊棋盘上 除了特殊方格上的所有方格,且各个骨牌不得重复覆盖 将棋盘均分四份,特殊方格必然位于四个较小的棋盘中,其余三个子棋盘中无特殊方格,我们直接利用一个L型骨牌覆盖这三个较小棋盘的交汇处,从而将问题转化为四个较小规原创 2017-04-06 12:49:16 · 1314 阅读 · 0 评论 -
分治算法---归并排序
归并排序,这里并没有采用递归算法自上而下,而是直接从下往上 稳定算法;初始序列的不同不会影响算法的时间复杂度 #include<iostream>using namespace std;void merge(int a[],int b[],int s,int n);void merge_detail(int a[],int b[],int l,int m,int r);void merg原创 2017-04-06 20:29:45 · 332 阅读 · 0 评论 -
递归算法---整数划分
//递归算法---整数划分#include<iostream>using namespace std;int f(int n,int m)//返回n的最大数为m的划分数{ if(n<1||m<1) return 0; if(n==1||m==1) return 1; if(n<m) return f(n,n); if原创 2017-04-06 20:39:13 · 255 阅读 · 0 评论 -
递归算法---全排列
#include<iostream>using namespace std;template<class type>void perm(type list[],int k,int m){ if(k==m) { for(int i=0;i<=m;i++) { cout<<list[i]<<' '; }原创 2017-04-06 20:35:57 · 267 阅读 · 0 评论 -
分治算法---快速排序
//分治算法---快速排序#include<iostream>using namespace std;int partition(int a[],int l,int r);//对a数组[l,r]进行快速排序。 void quicksort(int a[],int p,int r){ if(p<r) { int q=partition(a,...原创 2017-04-07 16:41:23 · 444 阅读 · 0 评论 -
贪心算法---打酱油
小明带着N元钱去买酱油。酱油10块钱一瓶,商家进行促销,每买3瓶送1瓶,或者每买5瓶送2瓶。请问小明最多可以得到多少瓶酱油。 输入格式 输入的第一行包含一个整数N,表示小明可用于买酱油的钱数。N是10的整数倍,N不超过300。 输出格式 输出一个整数,表示小明最多可以得到多少瓶酱油。 样例输入 40 样例输出 5 样例说明 把40元分成30元和10元,分别买3瓶和1瓶原创 2017-10-31 21:19:17 · 1695 阅读 · 0 评论 -
数据结构---教师钥匙
有一个学校的老师共用N个教室,按照规定,所有的钥匙都必须放在公共钥匙盒里,老师不能带钥匙回家。每次老师上课前,都从公共钥匙盒里找到自己上课的教室的钥匙去开门,上完课后,再将钥匙放回到钥匙盒中。 钥匙盒一共有N个挂钩,从左到右排成一排,用来挂N个教室的钥匙。一串钥匙没有固定的悬挂位置,但钥匙上有标识,所以老师们不会弄混钥匙。 每次取钥匙的时候,老师们都会找到自己所需要的钥匙将其取走,而不会原创 2017-11-01 18:24:50 · 424 阅读 · 0 评论 -
3.23-方格填数-深度搜索
方格填数如下的10个格子 +–+–+–+ | | | | +–+–+–+–+ | | | | | +–+–+–+–+ | | | | +–+–+–+(如果显示有问题,也可以参看【图1.jpg】)填入0~9的数字。要求:连续的两个数字不能相邻。 (左右、上下、对角都算相邻)一共有多少种可能的填数方案?请填写表示方案数目的整数。 注...原创 2018-03-23 19:07:19 · 220 阅读 · 0 评论 -
3.13-简单正则式最长字符串-递归
考虑一种简单的正则表达式: 只由 x ( ) | 组成的正则表达式。 小明想求出这个正则表达式能接受的最长字符串的长度。 例如 ((xx|xxx)x|(x|xx))xx 能接受的最长字符串是: xxxxxx,长度是6。输入一个由x()|组成的正则表达式。输入长度不超过100,保证合法。 输出这个正则表达式能接受的最长字符串的长度。 例如, 输入: ((...原创 2018-03-13 18:51:13 · 686 阅读 · 0 评论 -
3.22-密码脱落-最长公共子序列
X星球的考古学家发现了一批古代留下来的密码。 这些密码是由A、B、C、D 四种植物的种子串成的序列。 仔细分析发现,这些密码串当初应该是前后对称的(也就是我们说的镜像串)。 由于年代久远,其中许多种子脱落了,因而可能会失去镜像的特征。你的任务是: 给定一个现在看到的密码串,计算一下从当初的状态,它要至少脱落多少个种子,才可能会变成现在的样子。输入一行,表示现在看到的密码串(长度不大...原创 2018-03-22 16:20:50 · 446 阅读 · 0 评论 -
3.11-方格分割-深度优先搜索
6x6的方格,沿着格子的边线剪开成两部分。 要求这两部分的形状完全相同。如图:p1.png, p2.png, p3.png 就是可行的分割法。试计算: 包括这3种分法在内,一共有多少种不同的分割方法。 注意:旋转对称的属于同一种分割法。 深度搜索1、与跳蚱蜢对比,这道题需要深度搜索,首先本题要求所有可能的情况,而不是求最小; 2、广度搜索需要记录每一次情况,而本题不易...原创 2018-03-11 17:28:36 · 271 阅读 · 0 评论 -
3.10-跳蚱蜢-广度优先搜索
有9只盘子,排成1个圆圈。 其中8只盘子内装着8只蚱蜢,有一个是空盘。 我们把这些蚱蜢顺时针编号为 1~8每只蚱蜢都可以跳到相邻的空盘中, 也可以再用点力,越过一个相邻的蚱蜢跳到空盘中。请你计算一下,如果要使得蚱蜢们的队形改为按照逆时针排列, 并且保持空盘的位置不变(也就是1-8换位,2-7换位,…),至少要经过多少次跳跃? 简要分析这道题广度优先搜索和深度优先搜索均...原创 2018-03-11 15:47:18 · 559 阅读 · 0 评论 -
3.16-加减乘除数学题-深度搜索
现在小学的数学题目也不是那么好玩的。 看看这个寒假作业:□ + □ = □ □ - □ = □ □ × □ = □ □ ÷ □ = □(如果显示不出来,可以参见【图1.jpg】)每个方块代表1~13中的某一个数字,但不能重复。 比如: 6 + 7 = 13 9 - 8 = 1 3 * 4 = 12 10 / 2 = 5以及: ...原创 2018-03-16 18:28:43 · 278 阅读 · 0 评论 -
3.6-迷宫出口-模拟
X星球的一处迷宫游乐场建在某个小山坡上。 它是由10x10相互连通的小房间组成的。房间的地板上写着一个很大的字母。 我们假设玩家是面朝上坡的方向站立,则: L表示走到左边的房间, R表示走到右边的房间, U表示走到上坡方向的房间, D表示走到下坡方向的房间。X星球的居民有点懒,不愿意费力思考。 他们更喜欢玩运气类的游戏。这个游戏也是如此!开始的时候,直升机把100名玩家放...原创 2018-03-06 22:33:08 · 271 阅读 · 0 评论 -
深度优先搜索---寻找数字字符串中缺失的数字
给一个由 1 - n 的整数随机组成的一个字符串序列,其中丢失了一个整数,请找到它。 注意事项n <= 30 样例给出 n = 20, str = 19201234567891011121314151618丢失的数是 17 ,返回这个数。//深度优先搜索算法//给一个由1-n的整数随机组成的一个字符串序列,其中丢失一个整数,请找到它 注意这里n<=30 //例如 n=20,str="1918原创 2017-10-25 18:27:54 · 539 阅读 · 0 评论 -
6.9-最长回文串-dp
https://blog.csdn.net/CSDN_FengXingwei/article/details/82429808题目如上二维dp许多细节需要注意,比如maxlen长度。#include<string.h>using namespace std;char a[1000];int main(){ cin>>a; int n=strlen(a...原创 2019-06-09 20:07:46 · 215 阅读 · 0 评论