![](https://img-blog.csdnimg.cn/20201014180756928.png?x-oss-process=image/resize,m_fixed,h_64,w_64)
算法
AC_hell
这个作者很懒,什么都没留下…
展开
-
动态规划入门,基础
超详细动态规划入门,动态规划是什么。原创 2016-03-13 14:31:29 · 785 阅读 · 0 评论 -
(水)POJ-1426 BFS,DFS
题目大意:给出一个整数n,(1 题目链接:点击打开链接分析:网上将这题放在BFS里其实感觉没DFS恰当,因为DFS的话不会超时。这里为什么解都在long long范围里我也搞不懂。这里DFS,BFS的代码我都给上,注意BFS用c++提交会TLE而用g++就能AC,神奇的POJ。。。。附上代码:DFS:#include#include#include#include#i原创 2016-04-10 20:38:31 · 530 阅读 · 0 评论 -
(水)POJ-3126 BFS,埃式筛选及黑科技
题目大意:给定两个四位素数a b,要求把a变换到b,变换的过程要保证 每次变换出来的数都是一个 四位素数,而且当前这步的变换所得的素数 与 前一步得到的素数 只能有一个位不同,而且每步得到的素数都不能重复。题目链接:点击打开链接分析:分析可知这题肯定是用搜索,每次改变某位,每位有0-9(首位无0)10种变法,一共40个方向,可是到底DFS还是BFS还是二分呢?可只二分对这题显然是原创 2016-04-11 22:52:33 · 1146 阅读 · 0 评论 -
(水)POJ-2251 三维迷宫
题目大意:给一个三维图,可以前后左右上下6种走法,走一步1分钟,求最少时间(其实就是最短路)分析:这里与二维迷宫是一样的,只是多了2个方向可走,BFS就行(注意到DFS的话复杂度为O(6^n)肯定会TLE)附上代码:#include#include#include#includeusing namespace std;#define f(t,from,to) for(int原创 2016-04-10 17:51:26 · 1567 阅读 · 0 评论 -
深度优先搜索是什么?
深度优先搜索学习,有顺序哦!原创 2016-03-14 12:49:32 · 1969 阅读 · 1 评论 -
(水)POJ-1979 Red and Black(dfs,bfs)
题意:给你一个n*m的矩阵,上面的'#'代表你不能走的地方,'.'表示你能走的地方,'@'表示你的起点,问你最多能走多少格。题目链接:点击打开链接难度:水分析:从起点开始dfs走一遍,用ans记录结果,并用vis[x][y]记录map[x][y]是否已经走过,如果没走过便走过去且ans++直接上代码#include#includeusing namespace std;原创 2016-03-14 13:16:17 · 591 阅读 · 0 评论 -
(水)POJ-3009 DFS+回溯
题目大意:给一个n*m的图,给定起点及目的地,每次往某个方向滑动后只有撞到石头才会停下,且石头会被撞毁,如果出界则不能这样走。问做少滑动多少次能到目的地,且限制了最多滑10次(用来剪枝)(注意,滑动次数不是指走一格算一次,还是从开始滑动到停下才算一次)题目链接:点击打开链接分析:用dfs,每次枚举4个方向,若没有停下则一直前进直到停下进入下一次递归,同时记录下被撞到的石头被摧毁,返回时再将原创 2016-03-14 13:28:40 · 468 阅读 · 0 评论 -
(水)POJ-3050
题目大意:给一个5*5的数图,每次在任意一个点走5次组成一个6位的数字串,问共有多少中不同的数字串(数字串可以为0开头)题目链接:点击打开链接分析:这题是真的够水,数据这么小直接每个点进行一次dfs就好,需注意的是不同的数字串可以表示为不同大小的数,每次递归时只需算出当前大小最终记录次数是否出现过了就行。直接上代码:点击查看代码#include //POJ-3050 dfs原创 2016-03-14 16:15:41 · 589 阅读 · 0 评论 -
(一般)POJ-2718 DFS套DFS
题目大意:输入一个T代表多组数据,接下来T行,每行n(不确定大小)个数字(0-9),每次从中选出i个数字组成一个新的数字a,剩下的组成另一个数字b,求min(a,b)题目链接:点击打开链接分析:分析可知min(a,b)一定满足a的位数为n/2,另一个数字的位数为n-n/2,这个可用反证法证明。然后dfs枚举出n/2个数字并求出其大小,然后套一个dfs(代码中用了solve)枚举剩下的数字可原创 2016-03-14 16:28:37 · 745 阅读 · 0 评论 -
(水)POJ-2488字典序dfs
题目大意:给一个p,q分别代表图的行与列数(列在输出时用A,B......表示),规定一个走的规则,求出走遍所有格子且不重复的方法,若有多种答案则输出字典序最小的,无输出impossible。这里的字典序以列优先,即A2题目链接:点击打开链接分析:想要走遍全图很简单,这里棘手的便是要输出字典序最小的一个,由于dfs的特性,我们可以用贪心的思想来遍历,1.每次dfs的入口应该按照先枚举列再枚原创 2016-04-06 15:21:33 · 958 阅读 · 0 评论 -
(水)POJ-3083 按规定方向遍历方法
题目大意:给一个图,需求3个解,第一个和第二个分别为按照一定原则走到E的步数,规则为规定人有一个面向,第一个答案为依次按左前右后遍历所需步数,第二个为依次按右前左后遍历所需步数,其中前后左右都是以当前面向为参考系。第三个解为最短路。下面给出求第一个解时的走法的实例:我用0,1,2,3分别来代表西,北,东,南。假设我们从3的位置走到了当前位置,那么面向肯定是朝向1即朝向北方的,此时我们的原创 2016-04-08 16:24:35 · 1443 阅读 · 0 评论 -
(不易)POJ-2392 sort预处理+多重部分和
题目大意:一群牛要上太空,给出n种石块,每种石块给出单块高度h_i,使用第i种石头后高度不能超过a_i,数量c_i,要求用这些石块能组成的最大高度题目链接:点击打开链接分析:这个问题为典型的多重部分和,也属于完全背包可行性问题。与裸的多重部分和相比,多了一个条件a_i,所以不能再裸多重部分和的代码了。根据贪心的思想,对于a_i小的当然是堆在越下面越好,所以不妨先对a原创 2016-05-20 21:06:13 · 502 阅读 · 0 评论 -
(难)POJ-3666 sort预处理+DP
题目大意:给定长为N的序列A1, ... , AN,将其变为B1, . ... , BN,且序列B必须非严格单调,代价为|A1 - B1| + |A2 - B2| + ... + |AN - BN |,求最小代价。题目链接:点击打开链接分析:首先,看解答前先知道两点。1.这题数据水,求非严格递增的最小代价就行了2.对于最终的B序列中的任意一个元素原创 2016-05-17 23:07:33 · 514 阅读 · 0 评论 -
(经典)POJ-1631 LIS,偏序问题
题目大意:给出N条线,求去掉最少的线使最终没有线相交。题目链接:点击打开链接分析:此题和POJ-1065有异曲同工之妙。这里为了方便讲解,将一条直线用2个数字a[i],b[i]来表示,如1-4代表从1连到4的直线。首先很容易得出2条线不想交的条件是a[i]>a[j]且b[i]>b[j](或者相反),不妨将所有直线按a来排序(实际上在输入数据时便是排好了序的),然后要原创 2016-05-16 23:26:04 · 798 阅读 · 0 评论 -
(水)牌型种数 蓝桥杯2015年A组真题(背包问题)
分析:一开始我也只想着用dfs()给写出来,后来发现判重还有剪枝啥的都不太好搞出来,于是这才想到用DP来解,往往组合问题可以当成是选择问题用背包来解,以后多长个心眼吧!这里我们用dp[i][j]表示前i个数(即1-i)中选择j个,决策为选择k个i,则状态转移为dp[i][j]=Σ(k 0-4)dp[i-1][j-k]直接上代码:#include int dp[15][15];i原创 2016-03-19 12:09:30 · 805 阅读 · 0 评论 -
(水)垒色子 蓝桥杯2015A组题
分析:一眼便能看出这是道DP题(你若是问我怎么看出来的,那就是那种牵一发而动全身的感觉,其中任意一个色子边的变化都会引起全局变化),至于状态的话取得越细越好,就能尽量减少决策的种类,更易于状态的转移,所以我们在以dp[i]表示前i的(以后指的前i个都是指位于下部的)种类的基础上再加上一维,即还要将第i个的某种状态表示出来,因为只要第i个朝下的数字确定,那么第i-1个不能朝下的数字就能确定了(这里我原创 2016-03-19 15:35:41 · 555 阅读 · 0 评论 -
(水)POJ-3176,1163 数字三角形
题目大意:输入一个n层的三角形,第i层有i个数,求从第1层到第n层的所有路线中,权值之和最大的路线。规定:第i层的某个数只能连线走到第i+1层中与它位置相邻的两个数中的一个。(3176和1163简直了,父子题。。。)题目链接:点击打开链接分析:在此不作分析,不懂请看:点击打开链接附上代码:#include原创 2016-05-08 22:40:12 · 491 阅读 · 0 评论 -
(不易)POJ-2229 DP,数的分解
题目大意:给一个N,N可以分解为2的n次幂之和,如7可以这样分解:1) 1+1+1+1+1+1+1 2) 1+1+1+1+1+2 3) 1+1+1+2+2 4) 1+1+1+4 5) 1+2+2+2 6) 1+2+4 一共6种。 输出N可以分解的种数。原创 2016-05-09 16:26:28 · 472 阅读 · 0 评论 -
(经典)POJ-2385 DP
题目大意:T分钟,给定每分钟掉苹果的树(树1,树2),奶牛一共可以移动W次,奶牛一开始位于树1下。求最多拿到多少苹果题目链接:点击打开链接分析:状态:dp[i][j]:前i分钟可以移动j次的吃到的最多苹果数决策:第i-1分钟到i分钟移动或者不移动转移:如果移动,则 dp[i][j] = dp[i - 1][j - 1] + 第i分钟移动j次所位于的树有苹果掉下?原创 2016-05-12 13:36:09 · 497 阅读 · 0 评论 -
(经典)POJ-3280 回文串DP
题目大意:给定一个字符串S及其长度M与S所含有的字符种数N(最多26种小写字母),然后给定这N种字母Add与Delete的代价,求将S变为回文串的最小代价和。题目链接:点击打开链接分析:这题算得上是一个很经典的模型了,通过增添或者删除某些字母将一个字符串变为回文串,求原创 2016-05-12 19:36:43 · 1825 阅读 · 1 评论 -
(不易)POJ-1742 多重部分和,多重背包可行性
题目大意:传说中的男人八题,是男人就A这八题。有n种面额的硬币,面额个数分别为A_i、C_i,求最多能搭配出几种不超过m(1-m)的金额?题目链接:点击打开链接分析:首先来看看朴素的方法:bool dp[i][j] := 用前i种硬币能否凑成j递推关系式:dp[i][j] = (存在k使得dp[i – 1][j – k * A[i]]为真,0 然后三重循原创 2016-05-13 18:45:38 · 1023 阅读 · 0 评论 -
(经典)POJ-3046 多重集组合数
题目大意:蚂蚁牙黑,蚂蚁牙红:有A只蚂蚁,来自T个家族,分别记为ant[i]个。同一个家族的蚂蚁长得一样,但是不同家族的蚂蚁牙齿颜色不同。任取n只蚂蚁(S 题目链接:点击打开链接分析:多重集组合数也是由多重背包问题拓展出来的一类经典问题。这里仍然给大家讲2种方法:①朴素方法:状态:dp[i][j]:前i种中选j个可以组成的种数决策:第i种选k个,k=0转原创 2016-05-14 14:23:41 · 2772 阅读 · 1 评论 -
(经典)POJ-3181 完全背包+大数处理
题目大意:给定N,K,用1-K组成N,一共有多少组合方法?题目链接:点击打开链接分析:这题属于完全部分和问题,其实也可以理解为划分数问题。如n为3,k为2时,有1+21+1+1 这2种方法,我们可以理解为用1和2去填满或者组成3,这样想便是完全背包可行性也就是完全部分和问题。或者这样看,1|111|1|1 这样的话便是一个划分数问题,即将n个1划原创 2016-05-14 16:26:00 · 927 阅读 · 0 评论 -
(经典)POJ-1065 LIS问题,偏序问题
题目大意:n根木材长l_i重w_i,前一根木材大于后一根的话要浪费一分钟准备机器,求最省方案?题目链接:点击打开链接分析:原创 2016-05-16 23:11:53 · 971 阅读 · 0 评论 -
(水)POJ-1321 棋盘问题
题目链接:点击打开链接分析:就是八皇后问题,只是要注意只有k个棋子,也要注意下递归边界的处理附上代码:#include#include#includeusing namespace std;#define judge(x,y) !vis[y]&&a[x][y]=='#'char a[10][10];bool vis[10];int n, k, ans;void df原创 2016-04-10 18:45:21 · 353 阅读 · 0 评论 -
(水)POJ-2531 DFS技巧
题目大意:网络中有n个节点,可以把这n个节点划分成两个集合subsets A和subsets B,同一个集合中的节点间进行通讯没有时间损失,不同集合中的节点间进行通讯会有时间损失,求一种对n个结点的划分方法,使得时间的总损失最大。题目链接:点击打开链接分析:观察数据范围发现N最大只有20,所以用DFS的话最多递归2^20次,每次递归都只要一些简单的操作,所以肯定原创 2016-04-14 22:50:39 · 589 阅读 · 0 评论 -
(水)POJ-1416 DFS技巧
题目大意:公司现在要发明一种新的碎纸机,要求新的碎纸机能够把纸条上的数字切成最接近而不超过target值。比如,target的值是50,而纸条上的数字是12346,应该把数字切成四部分,分别是1、2、34、6。因为这样所得到的和43 (= 1 + 2 + 34 + 6) 是所有可能中最接近而不超过50的。(比如1, 23, 4, 和6 就不可以,因为它们的和不如43接近50,而12,原创 2016-04-16 12:34:40 · 447 阅读 · 0 评论 -
ssprintf,sscanf两个黑科技的作用
ssprintf,sscanf两个黑科技的作用关于这2个函数的使用方法网上一搜一大把,可我却还没有发现有好的文章来介绍它们在写题时的神奇用法。这里我也不做过多介绍,就讲一讲它们真正需要用到它们的地方。int a=13345678;char s[25]="\0";我们知道,对于int这些数字类型我们无法直接对其某一位上的数字进行操作,但是字符串却有随机操作的优点,可以直接对其中某一个原创 2016-04-11 23:05:35 · 2912 阅读 · 0 评论 -
POJ-3279 经典翻转问题
题目大意:给定一个矩阵,要么黑要么白,求出按照规则将其翻转为全白最小翻转次数的方案,如有多种最小方案则输出字典序最小的方案分析:此题为经典的翻转问题(开关问题),在看此题解析之前,希望大家看看我这篇文章原创 2016-04-12 22:15:33 · 3121 阅读 · 1 评论 -
POJ-1753 翻转技巧
题目大意:给定一个4*4矩阵,要么为白色要么为黑色,求按规则将其翻转为同一颜色的最少翻转次数(这里包括全为白色或者全为黑色)分析:此题与POJ3279基本没啥区别,分析详见POJ3279解析附上代码:#includeusing namespace std;#define min(A,B) A#define INF 0x3f3f3f3fint a[6][6];int b[6原创 2016-04-12 22:17:19 · 515 阅读 · 0 评论 -
数据的离散化
有些数据本身很大, 自身无法作为数组的下标保存对应的属性。如果这时只是需要这堆数据的相对属性, 那么可以对其进行离散化处理!离散化:当数据只与它们之间的相对大小有关,而与具体是多少无关时,可以进行离散化。例如9 1 0 5 4 与 5 2 1 4 3 的逆序对个数相同。设有4个数:1234567、123456789、12345678、123456排序转载 2016-05-16 20:50:25 · 748 阅读 · 0 评论 -
(水)大臣的旅费 蓝桥杯 树的直径
题目大意:给定一个图,每2个城市都只有一条路联通,求最长路分析:因为每2个城市都只有一条路联通所以为一颗树,要在树中求最长路即求树的直径,我们有一个求树的直径的算法,只要2次dfs()就够了。第一次随便找个点dfs()找到与其最远的点a,则点a必定为树的直径的起点或者终点,具体证明读者可以自己画个图用反证法,先假定并画出树的直径,然后随便找一个点并假设其最远点a不在树的直径的起点或者终点上,那原创 2016-03-16 21:28:42 · 559 阅读 · 0 评论 -
BZOJ1002 无向联通图的生成树计数
分析:求无向连通图的生成树个数我们要用到Matrix-Tree定理,这里我只给出具体实现方法,至于怎么证明。。。。我现在也没耐心去看。。有兴趣的同学可以看看 周冬老师的《生成树的计数及其应用》。好的,现在给出实现方法:点击打开链接,哈哈自己看吧,我是不太想写上来了。按照算法将行列式构造出来之后我们可以发现这个行列式是有特点的,可以用行列式的展开来得到一个递推关系式(所以说线代还是要好好学滴原创 2016-03-16 21:40:43 · 1034 阅读 · 0 评论 -
(不易)POJ-3414 BFS中的路径还原
题目大意:给出了两个瓶子的容量A,B, 以及一个目标水量C,对A、B可以有如下操作:FILL(i) 装满i瓶DROP(i) 清空i瓶POUR(i,j) 把i瓶都倒入j瓶中,若j已满则超出的部分的仍留在i中问经过哪几个操作后能使得任意一个瓶子的残余水量为C。题目链接:点击打开链接分析:这原创 2016-04-12 21:53:15 · 600 阅读 · 0 评论 -
路径还原
最短路中的路径还原问题:最早接触这个问题是在自己学习最短路问题的时候,那个时候学了几个最短路以为自己很牛B了,也是稍微了解了一下如何在DK最短路算法中还原路径,可是当今天遇到一个BFS需要用到路径还原,真的是绞尽了脑汁2个小时多才把AC代码给写了出来,这时才认识到自己是有多么的自负,所以决定写下这篇BLOG以供大家学习,也算是自己对知识点的一个总结吧!路径还原一直也是最原创 2016-04-12 22:02:00 · 2184 阅读 · 1 评论 -
(水)安慰奶牛 蓝桥杯
分析:最小生成树的一个变形。首先,最终必定是一颗树,先随便画一颗树然后自己模拟走一遍,会发现应该把连接某条边的2个顶点的权值加入到边权中,且边权应该乘2,所以最终以2l+point1+point2为边权生成最小生成树即可,至于起点在哪都不影响,只是因为睡前还要安慰一遍睡觉的顶点的奶牛(即起点的奶牛)所以选出最小的ci即可。直接上代码:#include /原创 2016-03-16 21:16:15 · 553 阅读 · 0 评论 -
最短路,模版
最短路一直是图论中比较热门的问题,因而求最短路的算法也是比较多的(在这里我就不给大家证明了,百度一大把),问题解法一多有些人就摸不清头脑了,到底该用哪个算法呢?让我们先总结一下4个常用的算法:1.Bellman-Ford算法2.Dijkstra算法(之后简称为DK最短路算法)3.Floyd-Warshall算法4.SPFA算法那么实际问题中我们该选择哪种算法才是比较合适的呢原创 2016-03-14 16:52:31 · 479 阅读 · 0 评论 -
翻转问题(开关,开灯问题)求解技巧
翻转问题技巧详解例.给定一个01串,现有翻转规则:翻转某一个位置时其后面2个位置也会跟着翻转,也就是每次翻转都会翻转3个连续的位置。要将01串全部翻转为0,求最小的翻转次数形似这类题的问题叫做翻转问题,也可以叫开关问题,对于这类题通常都会用到下面我要说的方法来解①.若某一个位置被翻转了n次,则其实际上被翻转了n%2次,因为翻转2k次相当与没翻转,翻转2k+1次相当于翻转了1次,原创 2016-04-06 18:31:44 · 6713 阅读 · 0 评论 -
(水)POJ-1930 无限循环小数化分数
题目大意:赶论文:论文里无限循环小数到底是由哪两个数除出来的呢?求分母最小的那一对。题目链接:点击打开链接分析:其实重点就在如何将无限循环小数化为分数,这里给大家归纳了公式。然后枚举循环节找出最小分母就行。纯循环小数用9做分母,有多少个循环数就几个9,比如0.3,3的循环就是9分之3,0.654,654的循环就是999分之654, 0.9,9的循环就是9分之9(原创 2016-05-25 13:56:06 · 1012 阅读 · 0 评论 -
数论-欧拉函数
在hihocoder上看到了欧拉函数的讲解,为了以后能温习就粘在这里了题目1 : 数论五·欧拉函数时间限制:10000ms单点时限:1000ms内存限制:256MB描述小Hi和小Ho有时候会用密码写信来互相联系,他们用了一个很大的数当做密钥。小Hi和小Ho约定了一个区间[L,原创 2016-05-06 17:15:11 · 1289 阅读 · 0 评论