自定义博客皮肤VIP专享

*博客头图:

格式为PNG、JPG,宽度*高度大于1920*100像素,不超过2MB,主视觉建议放在右侧,请参照线上博客头图

请上传大于1920*100像素的图片!

博客底图:

图片格式为PNG、JPG,不超过1MB,可上下左右平铺至整个背景

栏目图:

图片格式为PNG、JPG,图片宽度*高度为300*38像素,不超过0.5MB

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

-+
  • 博客(24)
  • 收藏
  • 关注

原创 子集生成算法

方法一: 增量构造法,也就是一次选一个元素放到上一次构造的子集中,先给出代码:void print_subset(int n,int* A,int cur){ for(int i=0;i<cur;i++) printf("%d ",A[i]); printf("\n"); int s=cur?A[cur-1]+1:0; //确定当前元素的最小可能值 for(int i=s;

2016-07-13 15:05:54 485

原创 UVa 122 - Trees on the level

解题思路: 方法一: 题目意思很明白,就是一颗二叉树的层序遍历,那么我看到这道题立即产生的一种想法就是,根据题目输入对每个节点做一个映射,这颗二叉树的每个节点我们都用一个字符串来做它的唯一标识,那么比如某个父节点的字符串是str,那么它的两个孩子节点所对应的字符串就分别是str+”L”(左孩子)和str+”R”(右孩子),根据题目的输入我们可以让每个字符串映射一个整型的值,代表这个字符串所标识的

2016-07-10 20:26:15 344

原创 UVa 12657- Boxes in a Line

解题思路: 刚开始想的是直接用STL的list直接模拟,结果写了一发,很无奈,超时了,因此必须自己用数组模拟双向链表进行模拟,因此STL慎用,虽然好用方便但是对于有的题时间性能要求比较高,STL就成了瓶颈。。。先给出一个连接两个节点的函数: void link(int L, int R) { right[L] = R; left[R] = L; } 有了这个代码,可以先记录好操作之

2016-07-09 10:35:03 382

原创 UVa 11988 - Broken Keyboard (a.k.a. Beiju Text)

解题思路: 我觉得这道题最简单的方法就是用STL里面的list直接模拟,遇到字符[就把插入位置定位在头部,遇到字符]就把插入位置定位在尾部,遇到正常字符根据目前的插入位置插入即可,最终得到的list即为所求文本内容。 方法二:当然也可以用双向队列进行模拟,但是因为队列的特点,每次插入的时候不能以一个单个的字符为单位进行插入,而应该在每次遇到[或]字符之前将之前的字符连成一个字符串,在遇到[或]的

2016-07-09 10:12:52 257

原创 Uva 136 - Ugly Numbers

题目解析: 根据题目意思,对于每一个丑数x,2x、3x和5x也都是丑数,而最小的丑数是1,因此我们可以从1开始依次的构造出后面所有的丑数,等构造到第1500个时停止,然后输出即可。可以利用优先队列priority_queue< LL,vector,greater >,每次将队首元素x出队列,令2x、3x和5x入队列,应该注意的是每一个进过队列的值都应该做个标记,避免以不同的方式构造出的同一个数多次

2016-07-07 14:46:04 220

原创 Uva 540 - Team Queue

题目解析:利用队列来模拟即可,本题有两个队列:每个团队有一个自己的队列,我们用map为每个团队整体映射一个唯一的ID,则团队整体又形成一个队列。每次进队的时候令当前想要进队的元素进入自己的小团队,同时也判断一下那个大的团队整体的队列中有无他所代表的团队的ID,若无将此ID进队即可;出队时则是先在团队整体的队列中找出位于最前面的ID,然后根据此ID到所对应的小团队中取最前面的元素,若取完后此小团队没有

2016-07-07 14:37:12 257

原创 Uva12096 集合栈计算机

如果对STL不熟悉的话,这道题确实还挺难的,这道题里综合运用了 STL中的一些容器,如:set,vector,map等,STL中的函数还是挺多的,不断学习,不断掌握吧 。看了看刘汝佳那本书里的解析 ,已经差不多明白了 题目思路 :本题的集合并不是简单的整数集合或者字符串集合,而是集合的集合。为了方便,我们可以为每个不同的集合分配一个唯一的ID,则每个集合都可以表示成所包含元素的ID集合,这样就可

2016-07-06 16:40:40 374

原创 Uva 156 - Ananagrams

题目倒是不难,但是通过这道题可以学习一下对STL的运用,同时深深地感觉到sort函数的强大。题目思路:把每个单词“标准化”,即全部转化为小写字母后再进行排序,使得每个单词都是按照字典序排序,然后再放到map中进行统计。注:在这道题中通过sort函数既实现了对许多单词按照字典序排序,也实现了将一个单词按照字典序对字母进行重排,orz,sort真的好强!!!贴代码:#include <algorithm

2016-07-06 10:57:21 318

原创 算法导论 动态规划之最长回文子序列

首先需要强调的一点是:子序列不同于子串,子串要求必须连续,而子序列则不需要,与本篇讨论的这个问题比较相似的一个问题就是求一个字符串的最长回文子串,这个问题我们在下一篇会进行讨论。 这里我们说两种解这道题的方法: 方法一: 这个方法是一个比较巧妙的思路, 只要把原字符串逆转后和原字符串比较并且利用求最长公共子序列的方式求出LCS即可得到最长回文子序列。也就是说求出的LCS=最长回文子序列。

2016-04-25 23:29:32 1437

原创 HDU 1003 Max Sum

这道题就是一道最大子段和问题,经典dp问题,只不过它不仅要你求出最大子段和,还要求你给出最大段的起始位置与结尾位置。 最大子段和就是基于递推公式 f[j]=max(f[j-1]+a[j],a[j]),至于结尾位置我们只需要在求解f数组的过程中用一个End变量记录一下即可,若此时的f[j]最大,则令End=j,而起始位置则是在得知结尾位置之后,利用结尾位置推出起始位置,至于怎样推,我这里给出两种方法

2016-04-22 13:59:46 307

原创 二维情形下的最接近点对问题

在上一篇中我们讨论了一维情形下的最近点对问题,本篇我们类比一维的思路讨论二维情形下的最接近点对问题。 将以上过程推广到二维最接近点对问题,设S中的点为平面上的点,它们都有2个坐标值x和y。同样我们将平面上的点集S线性分割为大小大致相等的2个子集S1和S2,我们选取一垂直线l:x=m来作为分割直线。递归地在S1和S2上解最接近点对问题,我们分别得到S1和S2中的最小距离d1和d2。令d=min(d1

2016-04-21 23:52:38 4005

原创 HDU 1052Tian Ji -- The Horse Racing

很有意思的一道题,做完这道题你就会充分的了解田忌赛马的策略了,要考虑的情况还是挺多的,挺考验思维的严谨性的。。。 好,废话不多说,下面开始题目的分析。 这道题的核心思想是贪心,其贪心策略的精髓就在于让田忌的每一匹马都发挥到最大价值,即每一次做出的选择都要是最优的的策略(这个选择指的是当田忌的一匹马要在对手的阵营中选出一匹马作为对手时,要选择一个能将自己的价值发挥到最大的对手)。 那么对于这道题

2016-04-21 22:23:44 324

原创 分治法求最接近点对问题

问题描述:在点集P中,找出这样的一对点,使得他们之间的距离在点集P中每两两所组成的所有点对中距离最小。(当然,这样的点对可能不止一组,但我们只要求输出一组即可。) 为了便于理解,我们循序渐进的来讨论这个问题,从中我们也慢慢体会分治算法的精妙之处。首先说说一维情况: 即假设这些点都位于一条直线上(x坐标轴上),采用分治法思想,考虑将所给的n个点的集合S分成2个子集S1和S2,每个子集中约有n/2个

2016-04-16 23:36:26 3102

原创 HDU 1232畅通工程

题目描述: 某省调查城镇交通状况,得到现有城镇道路统计表,表中列出了每条道路直接连通的城镇。省政府“畅通工程”的目标是使全省任何两个城镇间都可以实现交通(但不一定有直接的道路相连,只要互相间接通过道路可达即可)。问最少还需要建设多少条道路? 思路分析: 即利用并查集确定一共有几个集合,道路个数即为:集合总个数-1。贴代码:#include <algorithm>#include <cmath>

2016-04-04 18:28:23 224

原创 HDU 1272小希的迷宫

思路分析: 即利用并查集来检查图是否连通以及图是否成环。 要想输出Yes,必须满足以下两个条件: (1)、该图的所有顶点均连通。 (2)、该图不得成环。 其余情况输出No即可。 注意该题的一个坑点:输入数据只有0 0时,输出Yes。贴代码:#include <algorithm>#include <cmath>#include <cstdio>#include <cstdlib>

2016-04-04 18:15:57 249

原创 POJ 1611The Suspects

大致题意: n个学生分属m个团体,(0 < n <= 30000 ,0 <= m <= 500) 一个学生可以属于多个团体。一个学生疑似患病,则它所属的整个团体都疑似患病。已知:0号学生疑似患病,以及每个团体都由哪些学生构成,求一共有多少个学生疑似患病。 思路分析: 并查集的一个简单应用,利用并查集确定某一集合或者团体有多少元素(或个体)。在并查集板子的基础上再开一个total数组,用来记录当

2016-04-04 18:04:59 240

原创 并查集(Union-Find Set)小结

做了几道并查集的题,在这里做一个小小的总结,以表达我对这个精简的数据结构的浅显的理解。。。先说说用途: 1、并查集,顾名思义分为并和查。 并:即:将两个完全不相交的集合合并为一个集合。 查:查询某个元素属于哪一个集合,一般用来判断两个元素是否属于同一集合。 2、目前我所接触到的它的实际用途: (1)、求解最小生成树(克鲁斯卡尔算法) (2)、判断图是否连通或是否有环 (3)、确定无向图

2016-04-03 16:14:01 390

原创 HDU 5167Fibonacci

题意:给一个数n,问这个数n(<=10^9)是否能表示为斐波那契数列中的数的乘积。思路:先预处理得到斐波那契数列,先判断了一下,n<=10^9,该范围大概有40来个数,先预处理保存这些数即可。 接下来就进行DFS,但是每次枚举的范围都不变的话会超时的,因此需要每次缩小枚举的范围,这也是本题关键的一个剪枝技巧。 每次枚举的时候都从最大的斐波那契数开始,倒着进行枚举,这样下

2016-03-25 14:49:47 204

原创 HDU 5339Untitled

典型的深搜,每次都在b数组中去找一个小于等于a的数进行取模运算。注意:在判断条件中要有now>=b[i],这也算是一个小小的剪枝吧,没有的话会超时,我第一次就T在这了。贴代码:#include <algorithm>#include <cmath>#include <cstdio>#include <cstdlib>#include <cstring>#include <ctime>#i

2016-03-25 14:13:49 250

原创 HDU1016 Prime Ring Problem

题意就是输出所有的满足相邻的数相加是素数的序列(注意不要重复), 思路就是用深搜将每种情况遍历一次,输出所有满足条件的序列即可。注意:因为是一个环,为了避免重复,首先要确定第一个数,然后以这个数为起始开始深搜。贴代码:#include <algorithm>#include <cmath>#include <cstdio>#include <cstdlib>#include <cstrin

2016-03-25 13:56:49 193

原创 全排列的算法及c++实现

排列:从n个元素中任取m个元素,并按照一定的顺序进行排列,称为排列; 全排列:当n==m时,称为全排列。例如,如果集合是{a,b,c},那么这个集合中元素的所有排列是{(a,b,c),(a,c,b),(b,a,c),(b,c,a),(c,a,b),(c,b,a)},显然,给定n个元素共有n!种不同的排列,如果给定集合是{a,b,c,d},可以用下面给出的简单算法产生其所有排列,即集合(a,b,c,

2016-02-29 23:19:44 3222

原创 字符串模式匹配KMP算法

嗯,第一次学习KMP算法,做些笔记,肯定会有许多不足之处,以后还会不断更新修改。。。 KMP字符串模式匹配算法通俗点说就是一种在一个字符串中定位另一个串的高效算法。朴素的模式匹配算法的时间复杂度为O(m*n);而KMP模式匹配算法的时间复杂度则为O(m+n)。 朴素的模式匹配算法 很直观的可以写出下面的代码,来找出模式串在一个长字符串中出现的位置。“` /* 朴素的模式匹配算法

2016-02-09 22:06:38 407

原创 HDU5621 KK's Point

在圆上点三个点时,除圆上三个交点外,圆内没有交点;在圆上点四个点时,除圆上四个交点外,圆内出现了一个交点,因此,在N个点中每四个点便可以在圆内产生一个交点,因此N个点在圆内形成的点的个数为CN4,总的交点数就是CN4+N。贴代码:#include <algorithm>#include <cmath>#include <cstdio>#include <cstdlib>#include <c

2016-02-07 16:25:56 502

原创 codeforce 621B Wet Shark and Bishops

对角线 上两点满足abs(x2-x1)=abs(y2-y1),即满足x1+y1=x2+y2 或者x1-y1=x2-y2,贴代码:#include <algorithm>#include <cmath>#include <cstdio>#include <cstdlib>#include <cstring>#include <ctime>#include <ctype.h>#includ

2016-02-01 22:33:39 234

空空如也

空空如也

TA创建的收藏夹 TA关注的收藏夹

TA关注的人

提示
确定要删除当前文章?
取消 删除