![](https://img-blog.csdnimg.cn/20201014180756919.png?x-oss-process=image/resize,m_fixed,h_64,w_64)
ACM======start
Helios_nannan
得失成败,都只对自己交代
展开
-
poj 2488 A Knight's Journey 水DFS
传送门:poj 2488 A Knight’s Journey 题目大意有一个p*q的棋盘,有一个棋子只能走日字形,请问这个棋子能遍历完这个棋盘么, 行是按照大写字母的顺序也就是A,B。。。一直有p个 列是按照数字的顺序也就是1,2,。。。q 有q个 如果能遍历完这个棋盘输出遍历的路径。 如果不能输出impossible 输出的格式按照题目中给定的解题思路简单地DFS也没有什么坑#inc原创 2016-07-10 16:59:43 · 320 阅读 · 0 评论 -
hdu 2553 N皇后问题 dfs回溯
传送门:hdu 2553 N皇后问题 是中文题目就不用说过多的说明了。解题思路这个题目主要是进行递归的条件有一些难想一点。 还有就是如果不对所有的情况进行一次打表的话,很容易超时的! 对应于递归条件我们我们可以用一个vis[2][x]数组来分别保存已经放置的皇后占据了哪些列、主对角线和幅对角线AC代码#include<set>#include<map>#include<queue>#in原创 2016-07-10 17:11:57 · 333 阅读 · 0 评论 -
poj2676 Sudoku dfs
传送门:poj2676 Sudoku题目大意九宫格问题,也有人叫数独问题 把一个9行9列的网格,再细分为9个3*3的子网格,要求每行、每列、每个子网格内都只能使用一次1~9中的一个数字,即每行、每列、每个子网格内都不允许出现相同的数字。0是待填位置,其他均为已填入的数字。 要求填完九宫格并输出(如果有多种结果,则只需输出其中一种) 如果给定的九宫格无法按要求填出来,则输出原来所输入的未填的九宫原创 2016-07-11 12:17:32 · 386 阅读 · 0 评论 -
hdu 1495 非常可乐 BFS+倒水问题
传送门:[](http://acm.hdu.edu.cn/showproblem.php?pid=1495hdu 1495 非常可乐) 题目是中文的没有什么理解问题解题思路先来把问题特殊化,假如我们有三个容器分别容量是6升,3升还有一升,现在我们把六升的容器装满水,问经过多少次之后能到达给的4升。这个我们很容易通过简单地思考就能知道答案,过程为: (6,0,0)->(3,3,0)->(3,2原创 2016-07-11 22:42:08 · 934 阅读 · 1 评论 -
csu Kick the ball! 概率+DFS
传送门:csu Kick the ball!题目大意足球点球,两个队伍轮流踢,看最后的比分。如果某一个队伍已经不可能取胜了,就提前终止比赛,比如说比赛进行到了第九局第一只队伍踢完之后变为了4-2的比分那么就没有踢下去的必要了,就提前终止比赛,如果第九局之后是3-2的比分的话,那么第二组的球员还是有必要踢下去的,因为比赛是允许平局的。解题思路DFS一直搜下去如果到达的预测比分的状态并且比赛结束就可以了原创 2016-07-11 23:06:47 · 443 阅读 · 0 评论 -
poj 1077 Eight 八数码问题( 康拓展开+BFS状态压缩)
传送门:poj 1077 Eight题目大意输入的八数码 将一个八数码最后转换为 1 2 3 4 5 6 7 8 x 的格式,然后打印出路径康拓展开如果按照平常的思路,把x的位置看做0,一共有8!个状态,来判断某一个状态是否被访问过。 但是问题来了?怎么把一个带有x的数组转变为转变为数字呢?第一个联想到的就是STL中的map,但是map的速度太慢了,会超时,这个时候我们就要用一种快速的原创 2016-07-12 15:11:45 · 1667 阅读 · 2 评论 -
poj 1258 Agri-Net 基本&经典最小生成树
传送门:poj 1258 Agri-Net题目大意n个农场,已知这n个农场都互相相通,有一定的距离,现在每个农场需要装光纤,问怎么安装光纤能将所有农场都连通起来,并且要使光纤距离最小,输入的是邻接矩阵,输出安装光纤的总距离解题思路裸prim, 1. 随便找一个元素进行寻找 2. 找出和这个元素相邻的所有权值,如果不能到达表示无限大 3. 找到和这个元素相邻的最小权值,记录下来 4. 最小权值原创 2016-07-23 20:56:06 · 301 阅读 · 0 评论 -
hdu 2122 Ice_cream’s world III 最小生成树kruskal+并查集
传送门:hdu 2122题目大意判断输入的几个节点能不能组成最小生成树,如果能输出最小生成树的值,如果不能疏忽impossible解题思路刚开始用的prim一直WA一直WA就改为kruskal了,就kruskal果断过了! kruskal和prim不同的是,prim主要是针对节点的,也就是把节点加入集合里面,kruskal是把边也就是权值从小到大的加入到集合里面,如果这两个边不在同一个连通分量里面原创 2016-07-24 00:50:07 · 356 阅读 · 0 评论 -
poj1200Crazy Search
题目的链接:http://poj.org/problem?id=1200Language:DefaultCrazy SearchTime Limit: 1000MS Memory Limit: 65536KTotal Submissions: 25786 Accepted: 7216Descri原创 2015-12-24 11:38:05 · 1210 阅读 · 0 评论 -
hdu2602 bone collector
Bone CollectorTime Limit: 2000/1000 MS (Java/Others) Memory Limit: 32768/32768 K (Java/Others)Total Submission(s): 43044 Accepted Submission(s): 17940Problem DescriptionMany years ag原创 2015-12-27 12:52:50 · 1063 阅读 · 0 评论 -
hdu1272小希的迷宫
题目描述:输入任意组,两两连通的数据,最后以0,0结尾,判断所有的点是不是在一棵树上,并且不构成环。这个题目应该注意的是:当输入0,0的时候应该是符合题意的, 当输入1,2 2,1 0,0 的时候是不符合题意的 应为构成了环 输入的不一定是从1开始 也不一定是连续的输入 当原创 2015-12-12 11:41:40 · 1221 阅读 · 0 评论 -
poj1753 Flip Game 状态压缩+bfs
传送门:poj1753 Flip Game题目的大意在一个4*4的方格里面放黑或者白之一的卡片,当选中一个的,选中的那个就会翻转(如果是白色变为黑色,如果是黑色变为白色),伴随着他四周(上下左右)的的卡片也会翻转。就像下面这种情况, 如图所示,假设我们点击第三行第一列的时候不仅仅第三行第一列会变换状态,相应的第二行第一列,第三行第二列,第四行第一列也会变换,当然如果左边有的话也会变换状态。上图对应原创 2016-07-03 10:34:33 · 502 阅读 · 0 评论 -
poj3984 迷宫问题 简单bfs打印路径
题目传送门:poj 3984 迷宫问题 这个是中文题目,是很好理解的。 这也是一道很好的bfs模板题目。AC代码#include<cstdio>#include<cstring>#include<algorithm>#include<queue>#include<cstdlib>#include<iostream>using namespace std;struct Node{原创 2016-07-03 13:42:58 · 1324 阅读 · 0 评论 -
POJ2965 The Pilots Brothers' refrigerator dfs
传送门:POJ2965 The Pilots Brothers’ refrigerator题目大意这个题目和poj的poj1753题目有点类似只不过这个是每次点击的时候相应的行和列均发生了变化。 最后当门全开的时候结束解题思路一共有16个位置,从0到16十七个状态,就按顺序搜索这17个状态, 对于每个位置有两种情况(开/关),也就是说我们每次搜索1<<16中情况。AC代码#include<cst原创 2016-07-03 18:37:01 · 304 阅读 · 0 评论 -
Codeforces292D Connected Components 经典好题并查集
传送门:Codeforces292D Connected Components题目大意一个无向图,给出m条边,有k次询问,每次询问将第l到r条边暂时删去,求这时候有多少个连通分量。解题思路最朴素的思想,每次查询[a,b]的时候的时候,把从1到a-1和从b+1到最后做并查集,然后看有几个连通分量。但是很不幸的是这种做法的复杂度太高了,是o(m*n). 我们可以换一个想法用PL[i]这个数组存储前i个原创 2016-07-26 01:28:51 · 592 阅读 · 0 评论 -
POJ 1611 The Suspects (并查集)不相交集合+合并优化
传送门:POJ 1611 The Suspects (并查集)题目大意有很多组学生,在同一个组的学生经常会接触,也会有新的同学的加入。但是SARS是很容易传染的,只要在改组有一位同学感染SARS,那么该组的所有同学都被认为得了SARS。现在的任务是计算出有多少位学生感染SARS了。假定编号为0的同学是得了SARS的。解题思路向这种题目明显是并查集的一种变形叫不相交并查集。 父节点里面保存的是元素的原创 2016-07-26 01:40:07 · 359 阅读 · 0 评论 -
poj 1318 Word Amalgamation map的使用
传送门:Word Amalgamation 这个题目只要会熟练使用STL中的map就好了AC代码#include<cstdio>#include<map>#include<algorithm>#include<iostream>using namespace std;map<string,string>m;int main(){ string dic,str,tmp; i原创 2016-07-26 01:42:49 · 371 阅读 · 0 评论 -
hdu 3367 Pseudoforest 最大生成树
传送门:Pseudoforest题目大意就是求最大生成树,但是前提是要组成一个环解题思路按照边的最大到小排序一下,当变为一个环的时候就是要求的最大生成树,当然肯定不是当变为一个环就退出,当变为两个环的时候就不加这个边了,直到结束!AC代码#include<cstdio>#include<cstring>#include<algorithm>using namespace std;const原创 2016-07-26 01:51:34 · 323 阅读 · 0 评论 -
hdu 5441 Travel 离线操作+并查集
#include<cstdio>#include<cstring>#include<algorithm>using namespace std;const int MAXN = 5005;const int INF = 0x3f3f3f3f;int pre[MAXN<<2];int M,N;struct Node{ int a,b,val;}e[MAXN<<5];bool原创 2016-07-26 01:57:31 · 327 阅读 · 0 评论 -
poj1328 Radar Installation 贪心
传送门:poj1328 Radar Installation题目大意在一条水平的海岸线上,上面是海洋下面是大陆,还想里面有n个孤岛,在海岸线上可以放雷达,雷达的最大距离为d,题目原图: 可以抽象为一个直角坐标系,p1(1,2),p2(-3,1),p3(2,1)分别为三个孤岛,在海岸线上最多放两个雷达就可以检测到所有的孤岛, 输入:第一行输入孤岛数量n,以及雷达检测的最远距离d, 下面的n行原创 2016-07-04 12:19:56 · 573 阅读 · 0 评论 -
poj 3061 Subsequence 取尺法
传送门:poj 3061 Subsequence题目大意给定长度为n的数列整数a0,a1,a2…an-1以及整数S。求出总和不小于S的连续子序列的长度的最小值,如果解不存在输出0解题思路先介绍一下取尺法。 取尺法通常是指对数组保存一对下标(起点和重点),然后根据实际情况交替推进两个端点直到得到答案的方法。对应于这道题目来讲,由于每个元素都大于零,如果子序列[s,t)满足as+as+1+…+at-1原创 2016-07-15 01:51:34 · 837 阅读 · 0 评论 -
poj3278 Catch That Cow 水BFS+简单剪枝
传送门:poj3278 Catch That Cow题目大意一个农夫想要抓到出走的牛,农夫站在n位置,这头牛在k位置(同一个水平线上),农夫从该位置有两种方式出发: 1. 每次到达该位置前一个位置(i-1)或者下一个位置(i+1) 2. 没次到达该位置的两倍的位置(i*2)解题思路水BFS,看下面代码的剪枝,如果不进行相应剪枝的话会RCAC代码#include<cstdio>#include<原创 2016-07-05 09:57:04 · 430 阅读 · 0 评论 -
hdu 5687 Problem C 字典树
传送门:hdu 5687 Problem C 中文题目就不做过多的解释解题思路定义一个结构体,里面有26个字母,就像下面这样:struct Node{ int next[26]; int sum; void init() { sum = 0; memset(next,-1,sizeof next); }};然后定义一个这个类原创 2016-07-26 22:36:39 · 691 阅读 · 0 评论 -
csu 1555 Inversion Sequence 线段树反求逆序数
传送门:Inversion Sequence题目大意告诉逆序数,求出原逆序数解题思路我们可以先看样例怎么推倒出来的: 1 2 0 1 0 1. 在1前面有1个比这个数大的,所以1只能在第二个位置 2. 在2前面有两个比他大的数,其中1又排在了第二个位置,所以2只能排在第四个位置 3. 在3前面有0个比3大的,所以3只能排在第一个位置 4. 在4前面有一个比4大的,所以4只能在最后一个位置原创 2016-07-27 00:53:39 · 356 阅读 · 0 评论 -
poj3262 Prime Path 素数打表+bfs
传送门:poj3262 Prime Path题目大意两个四位数a,b,要求从a变到b,每次只能变四位中的一位,并且每次变换之后必须是素数,比如:从1033变到8179会经历下面几个过程: 1033 1733 3733 3739 3779 8779 8179输入:第一行输入有n组数据, 接下来的n行数据,每一行有两个四位整数,要求从第一个变换为第二个数, 输出变换次数解题思路这个和p原创 2016-07-05 13:51:47 · 340 阅读 · 0 评论 -
hdu 1231 最大连续子序列 DP
传送门:hdu 1231 最大连续子序列解题思路首先我们先要确定一下状态方程, 我们必须先要找到哪个子序列的和最大,所以dp[i]里面保存的是前i-1个中子序列中和最大的。 所以状态方程就能写出:dp[i] = max(a[i],dp[i-1]+a[i])其中a[i]表示的是输入的第i个数,如果a[i]<0的话,肯定是dp[i] = a[i]的所以这样就能保存了前i-1个中子序列的和的最大。通过原创 2016-07-16 00:47:45 · 1511 阅读 · 2 评论 -
hdu 2844 coins DP多重背包
传送门:hdu 2844 coins题目大意给定商品种类n和背包容量m以及对应的价值/容量和数量,求组合成不大于背包容量m有多少种可能。解题思路这是一个多重背包的题目,价值等于重量。我们根据每种硬币的价值和数量进行判断是转换为完全背包还是01背包。当一种硬币的(数量*价值)大于背包的总容量的时候,也就是相当于在不大于容量m的情况下该种物品满足完全背包的定义所以对于这一种物品来说使用完全背包的思想来求原创 2016-07-16 16:25:38 · 376 阅读 · 0 评论 -
poj 1426 Find The Multiple bfs+同余模定理
传送门:poj 1426 Find The Multiple题目大意给出一个整数n,(1 <= n <= 200)。求出任意一个它的倍数m,要求m必须只由十进制的’0’或’1’组成。解题思路这篇文章写得很好了poj 1426 Find The MultipleAC代码#include<cstdio>#include<cstring>#include<set>#include<stack>#i原创 2016-07-06 15:23:54 · 347 阅读 · 0 评论 -
hdu 1789 Doing Homework again 贪心
传送门:hdu 1789 Doing Homework again 题目大意一个人从WF回来要写作业,但是每次只能做一个,每个作业都有对应的截止时间,如果过了截止时间就会扣相应的分数,求扣的最小分数 输入:第一行输入多组则是用例t 下面的一行输入有几门作业n, 再下面一行对应的这n门作业的截止时间, 再下面一行对应的是n门作业的过了截止时间扣的分数 输出扣的最小分数解题思路先对截止时间排序原创 2016-07-16 21:07:19 · 382 阅读 · 0 评论 -
hdu 1069 Monkey and Banana DP
传送门:hdu 1069 Monkey and Banana题目大意一堆科学家研究猩猩的智商,给他M种长方体,每种N个。然后,将一个香蕉挂在屋顶,让猩猩通过 叠长方体来够到香蕉。现在给你M种长方体,计算,最高能堆多高。要求位于上面的长方体的长要小于(注意不是小于于等于)下面长方体的长,上面长方体的宽小于下面长方体的宽。解题思路每一种长宽高不同的箱子来说,最多有六种摆放方式, 把这六种摆放的样式全部原创 2016-07-17 00:58:08 · 337 阅读 · 0 评论 -
cf#336-B-Hamming Distance Sum 前缀和
传送门:cf#336-B-Hamming Distance Sum题目大意给定两个字符串a,b,求b串中长度为a的子串中的Hamming Distance之和解题思路根据数据范围所以肯定不能有两层循环。 我们可以先求出b串从第一个到某一位中字符1的个数,one[i]就表示b前i个位置中字符1的个数。 然后我们在挨个遍历a字符串,如果a[i]能够访问的b重最长的下标为lenB-lenA+i,所以如原创 2016-07-17 14:53:39 · 428 阅读 · 0 评论 -
ACdream 1216 Beautiful People 最长上升子序列变形
传送门:ACdream 1216 Beautiful People题目大意有n个人,分别对应着有拥有钱数ai和能力数bi,求ai和bi全部严格递增的子序列的数量,并且要求打印路径解题思路先将这个数组按照ai从小到大排序,如果ai相等的时候就按照bi的从大到小排序。这样一来就转换为求bi的最长上升子序列。 比如说下面这个例子: 1 10 2 12 2 11 2 10 3原创 2016-07-27 17:27:21 · 445 阅读 · 0 评论 -
hdu 5327 Olympiad 前缀和
传送门:hdu 5327 Olympiad题目大意给定一个整数如果这个整数的每一位都不相同的话,就说这个数叫美丽的数, 给定一个区间,求这个区间美丽数的数量解题前缀和试水题目,先打表,然后输出AC代码#include<cstdio>#include<algorithm>#include<cstring>using namespace std;const int MAXN = 200008;原创 2016-07-17 18:48:15 · 447 阅读 · 0 评论 -
hdu 1176 免费馅饼 二维动态规划
传送门:hdu 1176 免费馅饼 中文题目就不解释了解题思路这个题目是水DP题目,但是还有有一个难点就是找阶段,是选择位置是阶段还是时间是阶段好! 我们这两种阶段都讨论一下: 1. 位置是阶段也就是dp[i][j]表示i位置在j秒的掉饼数量,但是每一个阶段的状态又是和上一个阶段的状态有联系的。也就是这个阶段的状态中用到上一个状态的时间。所以假设这种阶段是不成立的 2. 时间是阶段,也就是d原创 2016-07-17 23:56:42 · 322 阅读 · 0 评论 -
hdu1166 敌兵布阵 线段树单点更新+区间求和
传送门:hdu1166 敌兵布阵 这个是个中文题目,所以肯定题目的理解不是问题。解题思路最基本的线段树,在新增或者删除的时候使用更新函数updataTree()来增加营内的数量,查询的时候使用queryTree查询出营区间的的认识总和。总而言之是水题。线段树入门题AC代码#include<cstdio>#include<cstring>#include<set>#include<stack原创 2016-07-06 21:51:25 · 358 阅读 · 0 评论 -
hdu1698 Just a Hook 线段树区间更新,延时标记
传送门:hdu1698 Just a Hook 题目大意有三种钩子,分为铜,银,金,对应的价值分别为1,2,3,一共有n个钩子,初始的时候每个钩子的都是铜的。先做如下操作对x到y区间的钩子改变为z价值(1~3)的,最后求出所有钩子的总价值。 输入:第一行输入t组测试数据 然后测试数据的第一行表示表示有多少个钩子 下面一行输入一个整数q表示有多少种操作 下面的q行是每一次操作是,x,y,z,表原创 2016-07-07 12:46:26 · 381 阅读 · 0 评论 -
hdu 2577 How to Type 经典DP
传送门:hdu 2577 How to Type题目大意给你一些字符串a~z||A~Z,然后我们按键最少能把他们都打出来,如果开始Cap大写灯是亮的,我们需要打a的话,可以按下cap键,然后再按a,需要两步,但是这下状态变为了大写灯亮,当然我们也可以按下shift,再按下a,需要两步,但是这下状态就变成了大写灯灭。题目要求的是,把这些字母打出来需要的最小按键数目。有一点需要注意,按键完成之后需要使c原创 2016-07-18 13:04:03 · 346 阅读 · 0 评论 -
poj2777 Count Color 线段树区间更新+位操作
传送门:poj2777 Count Color题目大意有一个长为L的甲板,能把他平均分为L段,每一段能有不同的颜色,为了简便,颜色可以数字(1,2,…T)代表不同的颜色。初始的时候L段均为颜色1。我们能对这个分为L段的甲板做两种操作: 1. C X Y Z,C代表操作 把区间[X,Y]中所有段变为Z颜色 2. P X Y ,P代表操作,表示查询出[X,Y]中有几种不同的颜色输入:第一行输入原创 2016-07-07 18:12:27 · 295 阅读 · 0 评论 -
hdu 1874畅通过程续 所有最短路算法集合
传送门:hdu 1874畅通过程续 这篇文章并不是为了这个题目而做过多的描述,是为了说几种最常用的最短路的算法单源最短路单源最短路就是以一个特定的点为起始点,求这个点到所有点的最短路。如果终点固定的话就叫做两点之间最短路问题。Dijkstra这个算法在数据结构书里面被划分到贪心张姐里面,但是在《运筹学》这类书里面被划分到了动态规划里面! 当然这个算法是有一个前提条件的,就是没法变得权值必须是正值原创 2016-07-28 18:32:49 · 656 阅读 · 0 评论 -
51nod 1183 编辑距离 DP
传送门:51nod 1183 编辑距离 在题目中给定了一个定义,编辑距离,想要把a串变为b串对于a中的每个字符可以有三种操作:在a串中增加一个字符,删除一个字符,还有改变一个字符。 这就对应的一个阶段的三种状态 我们来设定阶段dp[i][j]表示a串中的前i个长度和b串中前j个长度中种编辑距离的最小值。 - 当i==0&&j==0的时候,也就是dp[0][0]是0 - 当i==0的时候也就原创 2016-07-18 21:48:45 · 358 阅读 · 0 评论