![](https://img-blog.csdnimg.cn/20201014180756738.png?x-oss-process=image/resize,m_fixed,h_64,w_64)
算法集
xiedongbiao
随着记忆 消逝在风中
展开
-
[Ipsc2009]Let there be rainbows!
树链剖分,线段树原创 2023-07-16 11:35:29 · 355 阅读 · 0 评论 -
制作一个简易计算器
简易计算器原创 2023-01-21 22:37:48 · 325 阅读 · 1 评论 -
线段树入门
线段树入门原创 2023-01-20 16:02:10 · 1369 阅读 · 0 评论 -
发工资2(贪心)
贪心例题原创 2022-10-28 20:58:00 · 715 阅读 · 0 评论 -
AtCoder Beginner Contest 264 部分题解
ABC原创 2022-08-14 09:19:24 · 440 阅读 · 0 评论 -
射手宫(Lis)
Lis原创 2022-07-18 07:17:23 · 91 阅读 · 0 评论 -
最长上升子序列(Lis)
lis原创 2022-07-18 07:04:02 · 57 阅读 · 0 评论 -
八中魔法师
魔术师的桌子上有n个杯子排成一行,编号为1,2,…,n,其中某些杯子底下藏有一个小球,如果你准确地猜出是哪些杯子,你就可以获得奖品。花费c_ij元,魔术师就会告诉你杯子i,i+1,…,j底下藏有球的总数的奇偶性。采取最优的询问策略,你至少需要花费多少元,才能保证猜出哪些杯子底下藏着球?Input第一行一个整数n(1<=n<=2000)。第i+1行(1<=i<=n)有n+1-i个整数,表示每一种询问所需的花费。其中c_ij(对区间[i,j]进行询问的费用,1<=i&l原创 2022-05-15 14:18:18 · 302 阅读 · 1 评论 -
灌水(生成树)
最小生成树一、什么是图的最小生成树(MST)?不知道大家还记不记得树的一个定理:N个点用N-1条边连接成一个连通块,形成的图形只可能是树,没有别的可能。一个有N个点的图,边一定是大于等于N-1条的。图的最小生成树,就是在这些边中选择N-1条出来,连接所有的N个点。这N-1条边的边权之和是所有方案中最小的。二、最小生成树用来解决什么问题?就是用来解决如何用最小的“代价”用N-1条边连接N个点的问题。例如:【例4-9】、城市公交网建设问题【问题描述】有一张城市地图原创 2022-05-15 14:15:08 · 110 阅读 · 0 评论 -
树的相关问题
树的概念树是具有以下性质的有限结点集合:(1) 有一个被称为“根”的结点。(2) 根的所有孩子都是一颗子树的根。树的相关术语•结点的度(degree):该结点拥有的子数数目。上图中:degree(A) = 3, degree(F) = 0•叶子(leaf):度为0的结点•双亲(parent):拥有子树的结点•孩子(son):某个双亲结点的子树的根•兄弟(sibling):拥有同一个...原创 2022-05-15 14:01:25 · 369 阅读 · 0 评论 -
国际班的学生(并查集)
Description某校国际班有N(2 <= N<=10,000)个学生,编号为1.. N, 一共会流利地使用M(1<= M <=30,000)种语言,编号从1 .. M.,第i个学生,会说K_i(1 <= K_i<= M)种语言,即L_i1, Li2,..., L{iK_i} (1 <= L_ij <= M)。 现在如何任意两个学生想要交流的话,除非他们会同一种语言 或者他们能找到某个学生来做翻译。 现在校长希望任两个学生都能互相交流的话,就必须买一些原创 2022-05-03 09:23:14 · 566 阅读 · 0 评论 -
洛谷AT2168 [AGC007A] Shik and Stone
传送门题意翻译题目描述有一个纵 行,横 列的格子状棋盘。开始时,棋盘左上角的格子有一个马(不是象棋意义的马)。Shik 将会操纵它上下左右移动,从而到达右下角的格子。此时,马能够经过同一个格子多次(含左上角和右下角的格子)。给出 行字符串,如果第 行第 列的字符为 ' # ' ,则表示马在移动过程中至少通过了此格一次(左上角和右下角的格子一定会通过至少一次)。当 为 ' . ' 时,表示马在移动过程中并没有经过此格。请判断:马是否可能每次移动都向下或向右。一看到输入是...原创 2022-01-26 16:06:50 · 913 阅读 · 0 评论 -
洛谷AT1350 深さ優先探索
题目传送门题意翻译高桥先生住的小区是长方形的,被划分成一个个格子。高桥先生想从家里去鱼店,高桥先生每次可以走到他前后左右四个格子中的其中一个,但不能斜着走,也不能走出小区。现在给出地图:s:代表高桥先生的家g:代表鱼店.:代表道路#:代表墙壁高桥先生不能穿过墙壁。输入:第一行输入n(1<=n<=500),m(1<=m<=500)代表小区的长和宽,接下来n行每行m个字符,描述小区中的每个格子。输出:如果高桥先生能到达鱼店,输出"Yes",否则输出原创 2022-01-24 10:03:41 · 143 阅读 · 0 评论 -
洛谷AT319 3Match
题目传送门题意翻译题目描述有H行W列的矩阵,每一个矩阵都有一个数字填充。我们需要找出连续的横着3个及以上或竖着3个及以上的,由同一数字构成的长方形,如图:但是,这有可能会连通。那么,这些连通的只会变成一个。如图:需要求出长方形的个数(连通的只算一个)输入格式第一行两个正整数N和M。第二行到第N + 1 行,每一行M个由0到9的数,没有空格。输出格式一个正整数,表示长方形的个数(连通的只算一个)输入输出样例样例......原创 2022-01-23 11:56:43 · 567 阅读 · 0 评论 -
数字的拆分之一
dp原创 2021-10-29 18:52:19 · 182 阅读 · 0 评论 -
搬书(c++)
Description陈老师桌上的书有三堆,每一堆都有厚厚的一叠,你想逗一下陈老师,于是你设计一个最累的方式给他,让他把书 拿下来给同学们。若告诉你这三堆分别有i,j,k本书,以及每堆从下到上书的质量,每次取书只能从任一堆的最上 面取,显然,每次取书陈老师的体力消耗都会加大,这里用体力系数代表,取下第一本书时,体力系数为1,第二 本书时体力系数为2,依次类推,而每次体力消耗值则为体力系数与书的重量之积。书最多有100本。FormatInput第一行3个整数,分别为三堆书的数量i,j,k; 第原创 2021-10-06 21:06:19 · 179 阅读 · 0 评论 -
贪吃的小J
Description现在小J的胃的容量为0,她每吃一个orange,饱食度就会增加A;每吃一个lemon,饱食度就会增加B。小J还有一次喝水的机会,如果小J喝水前饱食度为x,喝水后饱食度会变为trunc(x/2).小J的胃的饱食度不能超过T,否则肚子会爆炸。 试求小J的胃的饱食度最大能达到多少。FormatInput一行给出三个数字T,A,B 1<=T<=5,000,000 1<=A,B<=TOutput如题Samples输入数据 18 5原创 2021-10-06 20:56:18 · 86 阅读 · 0 评论 -
滑动窗口
Description滑动窗口Input第 1 行:两个整数N和K ;K<=N<=1000000 第 2 行:N个整数,表示数组的第N个元素(<=2*10^9);Output第一行为滑动窗口从左向右移动到每个位置时的最小值,每个数之间用一个空格分开; 第二行为滑动窗口从左向右移动到每个位置时的最大值,每个数之间用一个空格分开。输入数据 18 31 3 -1 -3 5 3 6 7输出数据 1-1 -3 -3 -3 3 33 3 5 5 6 7原创 2021-10-03 12:04:00 · 54 阅读 · 0 评论 -
寻宝(枚举,模拟)
Description传说很遥远的藏宝楼顶层藏着诱人的宝藏。 小明历尽千辛万苦终于找到传说中的这个藏宝楼,藏宝楼的门口竖一个 木板,上面写有几个大字:寻宝说明书。 说明书的内容如下: 藏宝楼共有N+1层,最上面一层是顶层,顶层有一个房间里面藏着宝藏。 除了顶层外,藏宝楼另有N层,每层M个房间, 这M个房间围成一圈并按逆时针方向依次编号为0,…,M-1。 其中一些房间有通往上一层的楼梯,每层楼的楼梯设计可能不同。 每个房间里有一个指示牌,指示牌上有一个数字x,表示从这个房间开始按逆时针方向选择第x个有楼梯原创 2021-10-02 17:15:27 · 175 阅读 · 0 评论 -
攻击性的牛
John建造了一个有N(2<=N<=100,000)个隔间的牛棚,这些隔间分布在一条直线上,坐标是x1,...,xN (0<=xi<=1,000,000,000)。他的C(2<=C<=N)头牛不满于隔间的位置分布,它们为牛棚里其他的牛的存在而愤怒。为了防止牛之间的互相打斗,Farmer John想把这些牛安置在指定的隔间,所有牛中相邻两头的最近距离越大越好。那么,这个最大的最近距离是多少呢?FormatInput第1行:两个用空格隔开的数字N和C。第2原创 2021-09-12 17:07:08 · 78 阅读 · 0 评论 -
合并果子(数据结构 单调队列 堆)
地址:http://bzoj.org/p/P02713在一个果园里,多多已经将所有的果子打了下来,而且按果子的不同种类分成了不同的堆。 多多决定把所有的果子合成一堆。 每一次合并,多多可以把两堆果子合并到一起,消耗的体力等于两堆果子的重量之和。可以看出 所有的果子经过n-1次合并之后,就只剩下一堆了。多多在合并果子时总共消耗的体力等于每次合并所耗体力之和。因为还要花大力气把这些果子搬回家,所以多多在合并果子时要尽可能地节省体力。假定每个果子重量都为1并且已知果子的种类数和每种果子的数目,你的任务是设计出原创 2021-08-27 20:51:23 · 119 阅读 · 0 评论 -
递归求组合数
编一递归程序,求组合数 C(n,m)已知 C(n,m)=;Input一行给出n,mN,M<=100Output方案数思路:这道题应该用递归来求解,递归边界应该是当m的值等于0或等于n的时候返回1,因为n中选0个和n中选n个都是返回1,不然就返回C(n-1,m)+C(n-1,m-1)。CODE:#include <bits/stdc++.h>using namespace std;long long n, m;long long C(long lo原创 2021-08-28 09:55:59 · 1449 阅读 · 0 评论 -
递归求组合数加强版本
编一递归程序,求组合数 C(n,m)已知 C(n,m)=C(n-1,m)+C(n-1,m-1);Input一行给出n,m一行两个数字N,M,其值小于等于5000Output方案数%1000000007思路:这道题用这种方法肯定会超时,然而我们发现普通的递归会重复计算很多数,比如算C(2,2)的时候,在C(2,3)的时候算过了,可是又要重新计算,耗费了大量的时间,所以我们可以用记忆化来写,用一个数组来保存这个值有没有算过,如果算过了,就直接调用,如果没有,就老老实实的去算CODE:原创 2021-08-28 10:09:26 · 144 阅读 · 2 评论 -
Lin老师家的矿
Lin老师是个潜伏的富二代,他家有个巨大的矿场,为一个N*M的矩形 如果一个点为"W"则说明是一个矿点,如果它相邻的八个方向也是"W"则属于同一个矿区。 现在Lin老师想知道这个矿场有多少个矿区,但是他历来视金钱如粪土,乐于OI编码中,现在请你来帮帮他FormatInput第一行给出N,M(<=100) 接下来N行M列,描述这个矩形,"W"代表为矿点,"."代表是空地Output如题思路:用bfs来写,找到一个矿点就搜索,把它的这个矿搜索完了之后再变为逻辑假,直到搜索完了为止原创 2021-08-28 10:19:56 · 254 阅读 · 0 评论 -
钱币组合加强版本+
小明手上有 N!!!张纸币(他的钱很奇怪,可以是任意的正整数),现在他想知道 用这N种纸币可以组合出多少种不同的总额出来。输入第一行一个N.第二行N个正整数,总和不超过10^8输出如题思路:用递归来写,你可以选择当前第i个数选或不选再将最后结果保存CODE:#include<bits/stdc++.h>using namespace std;int v[210],n;bool f[100000010];void dfs(int dep,int sum)原创 2021-08-31 11:29:04 · 147 阅读 · 0 评论 -
体积
给出 n 件物品,每件物品有一个体积 V i ,求从中取出若干件物品能够组成的不同的体积和有多少种可能。FormatInput第 1 行 1 个正整数,表示 n。第 2 行 n 个正整数,表示 V i ,每两个数之间用一个空格隔开。Output一行一个数,表示不同的体积和有多少种可能。思路:这道题只要把握好数据范围就行了,应该是1000以内 。。。CODE:#include <bits/stdc++.h>using namespace std;int v[21], n;b原创 2021-09-03 11:44:44 · 271 阅读 · 1 评论 -
骑士移动
原题地址:http://forioi.com/p/1397贝茜和表妹各有一颗棋子。棋子每次移一步,且棋子只能往如图所示的八个方向移动。比赛的规则很简单,两个人需要从起点将棋子移到终点,谁能花最少的步数从起点走到终点,就是赢家。为了确保能赢表妹,贝茜希望每次都能算出最少的步数,你能帮助她么,棋盘大小为8*8的。输入输入起点和终点,用一个空格隔开。(确保起点一定能走到终点)输出输入最少的步数。样例输入a1 b2输出4思路:这道题比较难,需要先把开始点和结束点标记为原创 2021-09-05 11:37:14 · 260 阅读 · 0 评论 -
入门(bfs/dfs)
不是任何人都可以进入桃花岛的,黄药师最讨厌象郭靖一样呆头呆脑的人。所以,他在桃花岛的唯一入口处修了一 条小路,这条小路全部用正方形瓷砖铺设而成。有的瓷砖可以踩,我们认为是安全的,而有的瓷砖一踩上去就会有 喷出要命的毒气,那你就死翘翘了,我们认为是不安全的。你只能从一块安全的瓷砖上走到与他相邻的四块瓷砖中 的任何一个上,但它也必须是安全的才行。由于你是黄蓉的朋友,她事先告诉你哪些砖是安全的、哪些砖是不安全 的,并且她会指引你飞到第1块砖上(第1块砖可能在任意安全位置),现在她告诉你进入桃花岛的秘密就是:如果原创 2021-09-04 17:25:12 · 122 阅读 · 0 评论 -
图的宽度优先遍历
读入一个用邻接矩阵存储的无向图,输出它的宽度优先遍历序列。输入第 1 行 1 个正整数 n,表示图中顶点数,2≤n≤100;接下来的 n 行是一个 n×n 的邻接矩阵,a[i][j]=1 表示顶点 i 和顶点 j 之间有直接边相连,a[i][j]=0 表示没有直接边相连。保证 i=j 时,a[i][j]=0,并且 a[i][j]=a[j][i]。输出输出 1~n 的某一种排列,表示从顶点 1 开始,对该图进行宽度优先遍历得到的顶点序列,每两个数之间用一个“-”分隔。输入8...原创 2021-09-05 11:22:30 · 2135 阅读 · 0 评论 -
瓷砖(dfs)
在一个 w×h 的矩形广场上,每一块 1×1 的地面都铺设了红色或黑色的瓷砖。小林同学站在某一块黑色的瓷砖上,他可以从此处出发,移动到上、下、左、右四个相邻的且是黑色的瓷砖上。现在,他想知道,通过重复上述移动所能经过的黑色瓷砖数。输入第 1 行为 h、w,2≤w、h≤50,之间由一个空格隔开;以下为一个 w 行 h 列的二维字符矩阵,每个字符为“.”“#”“@”,分别表示该位置为黑色的瓷砖、红色的瓷砖、小林的初始位置。输出输出一行一个样例输入11 9.#.........原创 2021-09-05 11:17:04 · 716 阅读 · 0 评论