
===== 算法 =====
文章平均质量分 72
striner
这个作者很懒,什么都没留下…
展开
-
经典算法之线性dp LIS
动态规划一共分为:线性dp,背包问题,区间dp,数位dp,状压dp,树形dp,概率dp七种,今天就先来讲讲dp的第一种形式 -- 线性dp吧.这里,我以求最长上升子序列(LIS)的长度为例.问题: 给你一个长度为n的序列,a[1],a[2],a[3]......a[n],求其最长上升子序列长度。 最长上升子序列:递增的可间断的子序列,比如序列 1,3,-3,5,-2,6,其最长原创 2018-01-24 18:55:13 · 533 阅读 · 0 评论 -
经典算法之博弈论 填字母游戏
问题描述:有四种残局,星号'*'代表空格.两人博弈,轮流在空格处填补字母,一次只能填写一个,即'L'或者'O',最先拼出'LOL'字样的获胜.解题思路:每人每次只能填'L'字母或者'O'字母,而填充后局面如何就递归试探交给对方去判断,赢则return 1, 输则return -1, 平局则return 0.试探结束后再回溯用于试探下一个局面.代码实现:p原创 2018-04-01 19:15:50 · 1248 阅读 · 3 评论 -
经典算法之博弈论 高僧斗法
问题描述:两高僧斗法.现有若干级台阶(表示N级浮屠).又有若干小和尚随机的站在某个台阶上.最高一级台阶必须站人,其他任意.两位参加游戏的法师分别指挥某个小和尚向上走任意多级的台阶,但会被站在高级台阶上的小和尚阻挡,不能越过.两个小和尚也不能站在同一台阶,也不能向低级台阶移动.两高僧轮流发出指令,最后所有小和尚必然都会挤在高段台阶上,再也不能向上移动.轮到哪个高僧指挥时无法移动,则游原创 2018-04-02 08:37:18 · 448 阅读 · 1 评论 -
经典算法之走迷宫
问题描述:...1111111111111111111111111111111.111111........1111111111.111111.111111..111.11111111.....111111.11111111111.1111111111.11111111.111111.................11111111.111111.11111111111.1原创 2018-04-03 11:02:41 · 5833 阅读 · 0 评论 -
经典算法之并查集 合根植物
题目描述:w星球的一个种植园,被分成 m * n 个小格子(东西方向m行,南北方向n列)。每个格子里种了一株合根植物。这种植物有个特点,它的根可能会沿着南北或东西方向伸展,从而与另一个格子的植物合成为一体。如果我们告诉你哪些小格子间出现了连根现象,你能说出这个园中一共有多少株合根植物吗?输入格式:第一行,两个整数m,n,用空格分开,表示格子的行数、列数(1接下来一行原创 2018-04-03 11:16:41 · 784 阅读 · 2 评论 -
经典算法之二分查找 找出刚好比x稍微大点的那个数
题目描述:已知有序的序列,比如:2,3,3,5,9,9,9,12,12,13,15,22,22,22,22,25,25,23,91,95有整数x,比如: x=23要求找到一个刚好比x稍微大一点的元素位置当数组较大的时候,需要二分查找加快速度。思路分析:典型的二分查找问题,定义一个尾指针end和一个头指针begin不断二分递归,当end-begin==1时原创 2018-04-04 21:02:13 · 1790 阅读 · 0 评论 -
经典算法之分治法 大数相乘
题目描述:用串的形式表示大数的乘法。即求类似: "23234845847839461464158174814792" * "6457847285617487843234535"要求结果返回一个串。解题思路:采用分治法解题.具体方式已在代码中注释.代码实现:import java.util.Scanner;public class Main {原创 2018-04-05 13:29:56 · 2898 阅读 · 0 评论 -
经典算法之求字典序排列的最大子序列
题目描述:解题思路:首先,按字典序排列的最大子序列一定包含最后一个字母从后往前找,后面的总是小于等于前面的元素才能保证子序列按字典序排列代码实现:import java.util.Scanner;public class Main { public static void main(String[] args) { Scanner原创 2018-04-24 15:36:00 · 4796 阅读 · 3 评论 -
经典算法之求使三个数相等的操作次数
题目描述解题思路要想使三个数最终相同,就先给三个数排个序,令A > B > C, 若(B-A)%2 == 0,则使用操作2使B和C相等,再使用操作1使ABC均相等.若(B-A)%2 != 0,则先使用操作1让B和C的差值为0或者2的倍数,再使用操作2+操作1使三个数相等.代码实现import java.ut原创 2018-04-24 15:49:02 · 2217 阅读 · 0 评论 -
经典算法之博弈论 取球博弈
问题描述:取球博弈.局面上有一堆球,二人博弈,每人一次只能取1,3,7或者8个球.要求输出局面有n个球时的胜负情况.解题思路:这里我提供两种题解,一种是纯递归求解,但纯递归CPU消耗过大,后面我还会提供动态规划+缓存的题解方法.实现方式一:*纯递归解题, 由于纯递归对CPU消耗过大,这里我以1到50个球的局面情况为例public class原创 2018-04-01 18:51:11 · 2475 阅读 · 1 评论 -
经典算法之分治法 求最大区间和
问题描述:数组中整数有正有负求一连续子段,使得和最大化例如:2,4,-7,5,2,-1,2,-4,3最大连续段:5,2,-1,2其最大和为8解题思路:制造递归条件,将数组分为两部分.将区间和分为三部分计算:第一部分:从begin开始计算[begin, index)第二部分:从end开始计算[index, end)第三部分:原创 2018-04-08 21:23:37 · 1612 阅读 · 0 评论 -
经典算法之尼姆堆问题
问题描述:有四堆硬币,数量分别为2, 5, 12, 14两玩家轮流取硬币,每人每次只能从某一堆上取任意数量的硬币,取到最后的玩家胜解题思路:这道题用尼姆堆解题 模2加(异或)解法当每一堆硬币数量异或值为0时,必胜 10 101 1100 1110 ------ 0101代码实现:public cl原创 2018-03-31 20:38:14 · 1003 阅读 · 0 评论 -
经典算法之01背包
背包问题 一小偷偷东西 商场内有N件货品,每件货物重为wi,自身为价值vi 求小偷背包内所能装的东西的最大价值这里假设一共有5件货品,重量分别为:2 3 4 5 9, 对应的货品价值分别为: 3 4 5 8 10.代码实现:public class Main { public static void main(String[]原创 2017-12-25 21:33:34 · 692 阅读 · 0 评论 -
经典算法之巴什博弈变形
这里以2018年全国多校算法寒假训练营练习比赛(第三场)之小牛vs小客为例。题目链接:https://www.nowcoder.com/acm/contest/75/D题目描述 小牛和小客玩石子游戏,他们用n个石子围成一圈,小牛和小客分别从其中取石子,谁先取完谁胜,每次可以从一圈中取一个或者相邻两个,每次都是小牛先取,请输出胜利者的名字(小牛获胜输出XiaoNiu,小客获胜输出XiaoKe)(1...原创 2018-02-26 22:55:43 · 1768 阅读 · 0 评论 -
经典算法之全排列(详集)
我总结了全排列的各种题解,若有不全之处还请各位大大们慷慨指出.1. 全排列之取球游戏问题描述: m球中取n个球,共有多少种取法解题思路: 用递归思想解题.乍眼一看貌似递归无下手之处,其实每一个球只有两种情况:要么取, 要么不取. 若用m表示球的个数,n表示需要取的球的总数,那么当前球取则return fun(m - 1, n - 1) ; 不取则原创 2018-03-25 21:34:05 · 805 阅读 · 1 评论 -
Wannafly挑战赛12之银行存款
Wannafly挑战赛12之银行存款 链接:https://www.nowcoder.com/acm/contest/79/A来源:牛客网银行存款时间限制:C/C++ 1秒,其他语言2秒空间限制:C/C++ 32768K,其他语言65536KSpecial Judge, 64bit IO Format: %lld题目描述银行的定期存款一般有1年期、2年期、3年期、5年期四种原创 2018-03-24 22:15:51 · 305 阅读 · 0 评论 -
经典算法之出栈情况的模拟
问题: 出栈顺序模拟 求1到n个数的进栈出栈顺序一共有多少种思路讲解: 此题采用递归思想, 用f(n,m)记录第i个数的进出栈情况.n用于表示等待进栈的数的个数,m为栈内已有的个数.将每一时刻分为有数进栈,没有数出栈或者没有数进栈有数出栈两种情况,采用f(n - 1, m + 1) + f(n, m - 1)递归,若n == 0则表示所有数已经进栈,那么出栈顺序只有原创 2018-03-25 09:54:42 · 710 阅读 · 0 评论 -
经典算法之算式符号问题
题目要求给定字符串数组a = {1, 2, 3, 4, 5, 6, 7, 8, 9} a中的每两个元素之间都可以"+", "-"或者什么都不写(表两个元素合起来是一个数如:12,123等)连接进行运算要求输出结果为110的所有组合方式这道题写起来不难,只要思路理清就一切ok. (ps: 用递归解题,别忘了回溯~)代码实现public class Main原创 2018-03-25 14:34:02 · 627 阅读 · 0 评论 -
经典算法之天秤称重问题
问题描述:已知所有砝码重量均为3的倍数,且所有重量的砝码有且只有一个要求输出1到n的所有物品的称重方式解题思路:物品重量砝码1123 - 1334 3 + 159 - 3 - 1......经过对比发现,若物品重量刚刚超过了较大砝码的一原创 2018-03-31 18:47:43 · 8646 阅读 · 0 评论 -
经典算法之天平称重问题(进制解法)
问题描述:已知所有砝码重量均为3的倍数,且所有重量的砝码有且只有一个要求输出重量1到n的所有物品的称重方式解题思路:用字符串拼接结果三进制的返回值为0 1 2返回值为0则表示该权重不取返回值为1表示加上该权重返回值为2表示该权重需要加上两遍,不符合题意. 故需将其转换为-1减掉该位权重,对商进行改变.如: 2 ÷ 3 - 2 ... 0 == -原创 2018-03-31 20:20:29 · 6203 阅读 · 0 评论 -
十分钟读懂AES加密算法
偶阅博客一篇,漫画式的讲解十分有趣,故转之。原文地址:https://blog.youkuaiyun.com/lrwwll/article/details/78069013 ------------------------------------------------ 分割线 ------------------------------------------------今天看了Moserw...转载 2018-12-19 21:08:58 · 2901 阅读 · 0 评论