算法
骓不逝兮
如果不努力,你还能干嘛
展开
-
构造回文
给定一个字符串s,你可以从中删除一些字符,使得剩下的串是一个回文串。如何删除才能使得回文串最长呢?输出需要删除的字符个数。输入描述:输入数据有多组,每组包含一个字符串s,且保证:1<=s.length<=1000.输出描述:对于每组数据,输出一个整数,代表最少需要删除的字符个数。输入例子1:abcdagoogle输出例子1:22思路:将该字符串 a 反转成 b,寻找 a 和 b 的最长公共子序列,即可找到最少的字符删除数量。...原创 2021-03-17 21:43:11 · 162 阅读 · 0 评论 -
二分法
1、二分查找(用于有序序列中)例如;{1,2,4,5,7,9,13,25,37},从这9个数中找到某一个确定的数。int a[]={1,2,4,5,7,9,13,25,37};int left=0,right=9;while(left+1 < right){ int mid=(left+right)/2; if(num >= a[mid]) left=mid;...原创 2019-08-15 23:07:33 · 282 阅读 · 0 评论 -
BFS--广度优先搜索
广度优先搜索适用于最少(最短路径,最少步数)问题,每个顶点只访问没被访问的邻接点,将其存入队中,并做标记。当其邻接点访问完毕后,结束这点的访问。广度优先用到了“先进先出”队列,通过这个队列来存储第一次发现的节点,以便下一次的处理;而对于再次发现的节点,我们不予理会——不放入队列。因为该点或被访问过或等待处理。典型例题类型一1 迷宫问题 2 Knight Moves题1原创 2019-03-23 21:15:49 · 131 阅读 · 0 评论 -
包子凑数
小明几乎每天早晨都会在一家包子铺吃早餐。他发现这家包子铺有N种蒸笼,其中第i种蒸笼恰好能放Ai个包子。每种蒸笼都有非常多笼,可以认为是无限笼。每当有顾客想买X个包子,卖包子的大叔就会迅速选出若干笼包子来,使得这若干笼中恰好一共有X个包子。比如一共有3种蒸笼,分别能放3、4和5个包子。当顾客想买11个包子时,大叔就会选2笼3个的再加1笼5个的(也可能选出1笼3个的再加2笼4个的)。当然有时包子大...原创 2019-03-20 23:09:53 · 108 阅读 · 0 评论 -
正则问题
考虑一种简单的正则表达式:只由 x ( ) | 组成的正则表达式。小明想求出这个正则表达式能接受的最长字符串的长度。例如 ((xx|xxx)x|(x|xx))xx 能接受的最长字符串是: xxxxxx,长度是6。输入一个由x()|组成的正则表达式。输入长度不超过100,保证合法。输出这个正则表达式能接受的最长字符串的长度。例如,输入:((xx|xxx)x|(x|xx))xx程...原创 2019-03-20 21:18:55 · 559 阅读 · 1 评论 -
**贪心法** 之练习题集
贪心法 之练习题集https://vjudge.net/contest/174166#problem/A Hero#When playing DotA with god-like rivals and pig-like team members, you have to face an embarrassing situation: All your teammates are ki原创 2019-03-19 19:21:28 · 203 阅读 · 0 评论 -
方格分割
标题:方格分割6x6的方格,沿着格子的边线剪开成两部分。要求这两部分的形状完全相同。如图:p1.png, p2.png, p3.png 就是可行的分割法。试计算:包括这3种分法在内,一共有多少种不同的分割方法。注意:旋转对称的属于同一种分割法。思路:起初设想走方格,当遍历完所有方格,涂满18个方格之后,再来判断是否对称,发现时间需要很久。借鉴别人的方法:从中间点(3,3)出发,...原创 2019-03-19 19:13:35 · 3404 阅读 · 2 评论 -
跳蚱蜢
题目:有9只盘子,排成1个圆圈。其中8只盘子内装着8只蚱蜢,有一个是空盘。我们把这些蚱蜢顺时针编号为 1~8每只蚱蜢都可以跳到相邻的空盘中,也可以再用点力,越过一个相邻的蚱蜢跳到空盘中。请你计算一下,如果要使得蚱蜢们的队形改为按照逆时针排列,并且保持空盘的位置不变(也就是1-8换位,2-7换位,…),至少要经过多少次跳跃?注意:要求提交的是一个整数,请不要填写任何多余内容或说明文字...原创 2019-03-18 23:00:11 · 488 阅读 · 0 评论 -
全排列
1、非去重全排列思路:固定前 n 个,对n+1 个后面的进行全排列。如:{1、3、5、2}第一步:前三个不动,交换后面的,{1、3、5、2}第二步:前两个不动,交换后面的,{1、3、2、5}第三步:前一个不动,{1、5、3、2}、{1、5、2、3}、{1、2、5、3}、{1、2、3、5}。。。以上便是以 1 开头的全排列,即是 1 后面的数字进行的全排列。针对 3、5...原创 2019-03-18 15:51:07 · 177 阅读 · 0 评论 -
DFS训练集
1、数独问题你一定听说过“数独”游戏。如【图1.png】,玩家需要根据9×9盘面上的已知数字,推理出所有剩余空格的数字,并满足每一行、每一列、每一个同色九宫内的数字均含1-9,不重复。数独的答案都是唯一的,所以,多个解也称为无解。本图的数字据说是芬兰数学家花了3个月的时间设计出来的较难的题目。但对会使用计算机编程的你来说,恐怕易如反掌了。本题的要求就是输入数独题目,程序输出数独的唯一解。...原创 2019-03-13 15:43:32 · 221 阅读 · 0 评论 -
Codeforces 798C Mike and GCD problem
Mike and gcd problemMike has a sequence A = [a1, a2, …, an] of length n. He considers the sequence B = [b1, b2, …, bn] beautiful if the gcd of all its elements is bigger than 1, i.e. .Mike wants to cha原创 2017-08-27 19:15:02 · 191 阅读 · 0 评论 -
HDU2680-Choose the best route(经典最短路问题dijkstra算法)
Choose the best routeOne day , Kiki wants to visit one of her friends. As she is liable to carsickness , she wants to arrive at her friend’s home as soon as possible . Now give you a map of the city’s原创 2017-08-25 22:57:52 · 235 阅读 · 0 评论 -
CodeForces-707c[数学构造]
Pythagorean TriplesKatya studies in a fifth grade. Recently her class studied right triangles and the Pythagorean theorem. It appeared, that there are triples of positive integers such that you can con原创 2017-08-25 10:05:03 · 214 阅读 · 0 评论 -
Dijkstra算法和Floyd算法概述
Dijkstra算法(适用于 单源最短路问题。且没有负路权。)1.定义概览Dijkstra(迪杰斯特拉)算法是典型的单源最短路径算法,用于计算一个节点到其他所有节点的最短路径。主要特点是以起始点为中心向外层层扩展,直到扩展到终点为止。Dijkstra算法是很有代表性的最短路径算法,在很多专业课程中都作为基本内容有详细的介绍,如数据结构,图论,运筹学等等。注意该算法要求图中不存在负权边。问题描述:在无原创 2017-08-25 09:39:30 · 292 阅读 · 0 评论 -
蜥蜴与地下室
蜥蜴与地下室哈利喜欢玩角色扮演的电脑游戏《蜥蜴和地下室》。此时,他正在扮演一个魔术师。在最后一关,他必须和一排的弓箭手战斗。他唯一能消灭他们的办法是一个火球咒语。如果哈利用他的火球咒语攻击第i个弓箭手(他们从左到右标记),这个弓箭手会失去a点生命值。同时,这个咒语使与第i个弓箭手左右相邻的弓箭手(如果存在)分别失去b(1 ≤ b < a ≤ 10)点生命值。因为两个端点的弓箭手(即标...原创 2017-08-24 14:27:53 · 258 阅读 · 0 评论 -
筛选法(质数)
Vasya and Petya’s GameVasya and Petya are playing a simple game. Vasya thought of number x between 1 and n, and Petya tries to guess the number.Petya can ask questions like: “Is the unknown number原创 2017-08-21 10:23:21 · 390 阅读 · 0 评论 -
质数
Dima and Lisa Dima loves representing an odd number as the sum of multiple primes, and Lisa loves it when there are at most three primes. Help them to represent the given number as the sum of at most t原创 2017-08-18 20:46:25 · 191 阅读 · 0 评论 -
质因数分解
Soldier and Number Game Two soldiers are playing a game. At the beginning first of them chooses a positive integer n and gives it to the second soldier. Then the second one tries to make maximum possib原创 2017-08-18 19:58:38 · 261 阅读 · 0 评论 -
最长递增子序列延伸
Once againYou are given an array of positive integers a1, a2, …, an × T of length n × T. We know that for any i > n it is true that ai = ai - n. Find the length of the longest non-decreasing sequence o原创 2017-08-18 19:25:37 · 563 阅读 · 0 评论 -
扩展欧几里得算法
形如a*x+b*y=c(a,b均不为0)的方程,a,b,c都是整数,求(x,y)的整数解。1 判断是否有解 有解的充要条件是,c 可以被gcd(a,b)整除。推算过程: 令c=k*gcd(a,b) 有gcd(a,b)=gcd(b,a%b) 则ax+by=c=k*gcd(a,b) ax1+by1=gcd(a,b)=gcd(b,a%b)=bx1+(a%b)y1 a%b=a-(a/b原创 2020-06-01 21:19:53 · 170 阅读 · 0 评论 -
逆序数
逆序数1 定义: 在一个排列中,如果一对数的前后位置与大小顺序相反,即前面的数大于后面的数,那末它们就称为一个逆序。一个排列中逆序的总数就称为这个排列的逆序数。逆序数为偶数的排列称为偶排列;逆序数为奇数的排列称为奇排列。如2431中,21,43,41,31是逆序,逆序数是4,为偶排列。1-n的全排列中,逆序数最小为0(正序),最大为n*(n-1) / 2(倒序)2 求逆序数的算法:方法一: (O原创 2017-08-11 11:11:22 · 9414 阅读 · 1 评论 -
数塔
dp的经典题 解题的关键在于如何确定子状态以及状态转移方程。数塔在讲述DP算法的时候,一个经典的例子就是数塔问题,它是这样描述的: 有如下所示的数塔,要求从顶层走到底层,若每一步只能走到相邻的结点,则经过的结点的数字之和最大是多少? 已经告诉你了,这是个DP的题目,你能AC吗? Input 输入数据首先包括一个整数C,表示测试实例的个数,每个测试实例的第一行是一个整数N(1 <= N <= 1原创 2017-08-11 09:49:38 · 194 阅读 · 0 评论 -
最长递增子序列
给出长度为N的数组,找出这个数组的最长递增子序列的长度。 (递增子序列是指,子序列的元素是递增的)例如:5 1 6 8 2 4 5 10,最长递增子序列是1 2 4 5 10。1.定义状态: dp[i]表示以a[i]为结尾的最长递增子序列的长度。i= 1时,{5} dp[1] = 1 i= 2时, {1} dp[2] = 1 i= 3时,{6},{5,6} {1原创 2017-08-10 21:07:33 · 216 阅读 · 0 评论 -
最长公共子序列
给定两个序列求他们最长相同的子序列的长度。 例如:A={a,b,c,h,e,f} B={a,e,b,h,d,f}的最长公共子序列为{a,b,h,f},长度为41.定义子状态: dp[i][j]表示A序列前i项和B序列前j项的最长公共子序列的长度 2.状态转移: (1)a[i] = b[j]时,dp[i][j] = dp[i-1][j-1]+1 比如原创 2020-06-01 21:16:57 · 146 阅读 · 0 评论 -
最大子序列和
子序列:可以不连续,但是要保证出现的顺序与原字符串相同给定一个整数序列A1,A2……An。求最大的连续的子序列的和。 比如{1,-2,3,1,-1,2}的最大连续子序列的和为5(3+1-1+2)1.定义状态: dp[i]表示以a[i]为结尾的连续子序列的最大和 2.状态转移: if(dp[i-1]>0) dp[i]=dp[i-1]+a[i]; else dp[i]=...原创 2017-08-10 19:56:56 · 456 阅读 · 0 评论 -
快速幂 + 逆元
逆元乘法逆元: 有 a * x = 1 (mod c) 称 x 为 a 与 c 的乘法逆元。理论依据:(mod 对于加减乘除都可进行分配) f / a mod c= ? (f mod c / a mod c = ?) 如果存在 a*x = 1(mod c) 那么两边同时乘起来,得到 f*x = ?(mod c)成立条件: 1 模方程 a*x= 1(mod c)存在解 ...原创 2017-08-10 15:25:23 · 259 阅读 · 0 评论 -
动态规划问题(2)
3 >完全背包有 N 种物品和一个容量为 V 的背包,每种物品都有无限件可用。放入第 i 种物品的费用是 Ci ,价值是 Wi 。求解:将哪些物品装入背包,可使这些物品的耗费的费用总和不超过背包容量,且价值总和最大。 第一步:确定状态 f[i, j ] 依然表示前 i 种物品恰放入一个容量为 v的背包的最大权值。 第二步:确定状态转移方程 f [ i,j ] = max(f [ i-1, j原创 2017-08-08 19:09:13 · 255 阅读 · 0 评论 -
动态规划问题
1> 装箱问题(简化的背包问题)有一个箱子容量为V(正整数,0<=V<=20000),同时有n个物品(0<n<=30),每个物品有一个体积(正整数)。 要求n个物品中,任取若干个装入箱内,使箱子的剩余空间为最小。 输入描述:一个整数v,表示箱子容量;一个整数n,表示有n个物品;接下来n个整数,分别表示这n 个物品的各自体积 输出描述:一个整数,表示箱子剩余空间。 样例输入: 24 6原创 2017-08-07 20:13:09 · 345 阅读 · 0 评论 -
DFS--深度优先搜索
DFS --深度优先搜索1 树(二叉树)的三种遍历先序:根-左-右中序:左-根-右后序:左-右-根伪代码: 先序 void PreoderTraversal(BinTree BT){ if(BT) { print(BT->data); PreoderTravers原创 2017-08-05 10:06:07 · 257 阅读 · 0 评论