![](https://img-blog.csdnimg.cn/20201014180756928.png?x-oss-process=image/resize,m_fixed,h_64,w_64)
算法
文章平均质量分 55
qdlgdx_lsy
这个作者很懒,什么都没留下…
展开
-
2013年8月九度Online Judge程序猿求职及面试月赛
题目1 棋盘寻宝两种思路:(1)二维的动态规划(解题报告)(2)深搜(自己).动态规划只需要0ms,而深搜却需要50ms。#include #include #include using namespace std;int map[8][8], dp[8][8];int main(){ int i, j; //freopen("/home/lsy/Desk原创 2013-08-19 17:08:30 · 607 阅读 · 0 评论 -
并查集的相关题目
这几天一直在刷并查集的题目,对于并查集的较难的题目,等着功力深厚了在做吧。先说一下杭电上面的题目:并查集专题链接http://acm.hdu.edu.cn/problemclass.php?id=721hdu1116:先用并查集判断图是否联通,再看是不是存在欧拉路径。(利用欧拉路径需要满足的顶点度数的要求).要注意题意的转换hdu1142:这题没有用并查集解决。先用dijkst原创 2013-09-26 18:10:49 · 1096 阅读 · 0 评论 -
拓扑排序及其应用
拓扑排序及其应用1.拓扑排序的介绍对于一个有向无环图G=(V,E)来说,其拓扑排序是G中所有结点的一种线性次序。该次序满足如下条件:如果图G包含边(u,v),则结点u在拓扑排序中处于结点v的前面(如果图G包含环路,则不可能排出一个线性次序。)可以将图的拓扑排序看作是将图的所有结点在一条水平线上排开,图的所有有向边都从左指向右。2.拓扑排序与深搜的结合。poj1270:http:原创 2013-10-09 16:58:58 · 1242 阅读 · 0 评论 -
可行遍性问题之欧拉回路
可行遍性问题之欧拉回路(以下参考图论算法理论、实践及应用一书)1.判断是否是欧拉回路无向图G存在欧拉通路的充要条件是:G为联通图,并且G仅有两个奇度节点或者无奇度节点。有向图D存在欧拉通路的充要条件是:D是有向图,D的基图联通,并且所有顶点的出度与入度相等;或者除两个顶点外,其余顶点的出度与入度相等,而这两个顶点中一个顶点的出度与入度之差为1,另一个顶点的出度与入度之差为-原创 2013-10-07 21:13:43 · 995 阅读 · 0 评论 -
Havel-Hakimi定理及其应用
Havel-Hakimi定理及其应用Havel-Hakimi定理:由非负整数组成的非增序列s:A[0], A[1],.....,A[n](n>=2,A[0]>=1)是可图的,当且仅当序列s1:A[1]-1,A[2]-1, A[A[0]]-1,A[A[0]+1],.....A[n]是可图的。Havel-Hakimi定理实际上给出了一个序列s构图方法:把序列s按照非递增顺序排好序后,从中选出度原创 2013-10-03 00:02:37 · 1156 阅读 · 0 评论 -
最近公共祖先问题(LCA)
最近公共祖先问题(LCA)(下面的内容来自算法艺术与信息学竞赛一书)LCA问题:给出一个有根树T,对于任意两个节点u和v,求出 LCA(T, u, v).即离根最远的结点x,使得x同时是u和v的祖先。 把LCA问题看成询问式的:给出一系列询问,程序当对每一个询问尽快做出反应。对于这类问题有两种解决方法:(1)在线算法(online-algorith原创 2013-09-29 20:46:44 · 841 阅读 · 0 评论 -
poj 1365 Prime Land
题意:输入:a1,b1,a2,b2....。求出x=a1^b1 * a2^b2 * ....。将x-1这个数分解成素数的乘积。并将这些素数按从大到小的顺序输出及其幂。思路:求出所有的素数。求出x,再因式分解。本题比较难的部分是处理输入。参考C++ primer。#include #include #include #include #include #include using原创 2013-09-05 15:57:11 · 557 阅读 · 0 评论 -
2013年7月九度Online Judge程序猿求职及面试月赛 题解
题目1525:子串逆序打印题目描述: 小明手中有很多字符串卡片,每个字符串中都包含有多个连续的空格,而且这些卡片在印刷的过程中将字符串的每个子串都打印反了,现在麻烦你帮小明将这些字符串中的子串修正过来,同时为了使卡片美观,压缩其中的连续空格为1个。输入: 输入包含多个测试用例,每个测试用例的第一行是一个正整数 n,1=输出: 对应每个测试用例,请按照要求输出原创 2013-07-22 13:49:57 · 877 阅读 · 0 评论 -
堆排和优先队列的实现
用优先队列可以实现堆排。#include using namespace std;/*优先队列.数组下标从1开始。[1,n]*/template class priqueue { public: priqueue(int m):n(0) { maxsize = m; Arr = new int[maxsize原创 2013-08-16 11:35:08 · 770 阅读 · 0 评论 -
计算2进制数中1的个数
法一:移位+计数实现。int BitCount(int x){ int k=0; for(;x;x>>=1) k+=x&1; return k;}法二:不断将最右边的1通过&操作变为0.即可统计出1的个数。int BitCount(int x){ int k=0; while(x) {原创 2013-04-09 09:09:33 · 488 阅读 · 0 评论 -
KMP算法及POJ上相关的题目
KMP算法的介绍与POJ上一些相关的题目一 :KMP算法的介绍KMP算法的核心是构造next[]数组。先搞清楚next数组的含义。例如:next[j] = k;这样的一个式子表示的含义是:当主串中第i个元素与模式串中的第j个元素匹配失败时,应该保持i指针不动,而将模式串中的j指针移动到k这个位置。然后将主串中第i个元素与模式串中的第j个元素匹配。若匹配的话就同时移动i和j指针。不匹配的话,原创 2013-07-23 16:47:38 · 692 阅读 · 0 评论 -
poj 1691 Painting A Board (拓扑排序+dfs)
题目链接:http://poj.org/problem?id=1691题目大意:给你n个小矩形,可以一个大矩形。给这n个小矩形涂色,涂色的要求是:只有位于它上方的并且和它邻接的小矩形涂完了色,它才能涂色。(很明显想到拓扑排序)用刷子给n个矩形涂色,刷子一次可以给多个符合涂色要求的相同颜色的矩形涂色。当颜色不同时,需要换刷子。问最少需要换多少次刷子?题目的输入:样例个数,每个样例的小原创 2013-08-08 19:32:09 · 618 阅读 · 0 评论 -
区间图着色问题
这是算法导论贪心算法一章的一个习题:题目描述:假定有一组活动,我们需要将它们安排到一些教室,任意活动都可以在任意教室进行。我们希望使用最少的教室完成所有的活动。设计一个高效的贪心算法求每个活动应该在哪个教室进行。(这个问题称为区间图着色问题(interval-graph color problem)。我们可以构建一个区间图,顶点表示给定的活动,边连接不兼容的活动。要求用最少的颜色对顶点进行着色原创 2013-08-25 20:30:45 · 2442 阅读 · 0 评论 -
poj 1321 棋盘问题 深搜+剪枝
题目链接:http://poj.org/problem?id=1321题意:给定棋盘,让你在棋盘上放k个棋子。要求这K个棋子的任意两个不能放在棋盘中的同一行或者同一列。代码:(深搜+剪枝)#include #include using namespace std;char Board[10][10];int n, k;int nCnt;int visit[10][1原创 2013-08-07 10:01:53 · 728 阅读 · 0 评论 -
poj3254 Corn Fields
题目链接:http://poj.org/problem?id=3254题目大意:给定N*M矩形的格子。1表示这个格子可以放牛,0表示不能。但是相邻的格子之间不能放牛。问总共有多少种放牛的策略?(不放牛也算1种)思路:状态压缩DP#include #include #include using namespace std;const int MAXN = 100000000;i原创 2013-08-23 19:44:03 · 537 阅读 · 0 评论 -
poj1185 炮兵阵地
题目链接:http://poj.org/problem?id=1185题意:汉语#include #include #include #include using namespace std;int map[110];int N, M;int dp[2][65][65];//滚动数组int state[65];int soilder[65];/*状态转移方程:dp[原创 2013-08-23 17:45:42 · 641 阅读 · 0 评论 -
poj 2653 Pick-up sticks
题目链接:http://poj.org/problem?id=2653题意:给你n根木棍,问在最上面的有哪些?思路:运用叉积判断线段是否相交。在比较的时候,一定要注意顺序。否则有可能TLE。#include #include #include using namespace std;struct Point { double x, y;};const int M原创 2013-08-22 20:52:46 · 488 阅读 · 0 评论 -
poj 2653 Intersecting Lines
题目链接:http://poj.org/problem?id=1269题目大意:给定两条直线,判断两条直线共线、平行、相交。若相交,求出交点。思路:考察叉积的应用。#include #include #include using namespace std;const int INF = 100010;struct Point { int x, y;};Poi原创 2013-08-21 21:10:02 · 505 阅读 · 0 评论 -
并查集的介绍
并查集1。并查集的基本操作设想需要对不相交集合进行两种操作:(1)检索某元素属于哪个集合;(2)合并两个集合。我们最常用的数据结构是并查集的森林实现。在一个不相交集合森林中,每个成员仅指向它的父结点。每棵树的根包含集合的代表,并且是自己的父结点。三种不相交集合的操作:makeSet:简单的创建一棵只有一个结点的树。findSet:通过沿着指向父结点的指针找到根。这一通向原创 2013-09-29 21:30:28 · 579 阅读 · 0 评论