
解题报告
文章平均质量分 69
jordandandan
这个作者很懒,什么都没留下…
展开
专栏收录文章
- 默认排序
- 最新发布
- 最早发布
- 最多阅读
- 最少阅读
-
七桥问题(poj2513)
给定一个图,是否存在“一笔画”经过涂中每一点,以及经过每一边一次。这样就是求图中是否存在欧拉路Euler-Path。回顾经典的“七桥问题”,相信很多同学马上就明白了什么是 欧拉路 了,这里不多作解释。 由图论知识可以知道,无向图存在欧拉路的充要条件为:① 图是连通的;② 所有节点的度为偶数,或者有且只有两个度为奇数的节点。 其中①图的连通性用程序判断原创 2013-07-25 20:54:59 · 896 阅读 · 0 评论 -
dp求解矩阵链问题(poj1651)
例如上图,将所得结果存入数组中动规方程组:此题只不过是不能取第一个和最后一个,求解方法同矩阵链乘源码:#include#define MAX 110int lenth;int m[MAX][MAX];int c[MAX];void multiplication(void){ int i,l,k,j,temp; for(i=1;i<lenth原创 2013-08-24 16:25:16 · 775 阅读 · 0 评论 -
poj 2406(kmp)
kmp 模板:#include#include#includeint next[100];void getnext(char b[]){int i=1,j=0; //i是每个位子,j是回退的位子next[1]=0;while(i<=strlen(b)){if(j==0||b[i-1]==b[j-1]){i++;j++;next[i]=j;}else j=next原创 2013-08-14 10:25:23 · 627 阅读 · 0 评论 -
poj1251(prim)
prim 模板int prim(){ int s = 1; int m = 1; bool visit[30]; int min,flag; memset(visit,false,sizeof(visit)); int dist[30]; for(int i=1;i<=n;i++) dist[i] = inf; in原创 2013-08-14 11:42:51 · 723 阅读 · 0 评论 -
poj 2631(dfs求最长路径)
题目中要求有1w个点,所以我们用邻接表来建立图而不要用邻接矩阵用degree来计算节点的度,选出一个叶子结点从他dfs一次最长路径,找到这个最长路径的结束点s,再从s来dfs求得最长路径源码:#include #include #include using namespace std;int mx,mxp;int degree[100005];bool visit[1000原创 2013-08-14 15:14:19 · 3082 阅读 · 0 评论 -
poj 1364(差分约束-bellmanford)
差分约束:如果一个系统由n个变量和m个约束条件组成,其中每个约束条件形如xj-xi求解差分约束系统,可以转化成图论的单源最短路径(或最长路径)问题。观察xj-xi解题思路: 1 2 gt 0 a1+a2+a3>0 2 2 lt 2 a2+a3+a4首先设Si=a1+a2+a3+...+原创 2013-08-15 15:45:06 · 653 阅读 · 0 评论 -
poj 1442(堆---优先队列)
使用大顶堆和小顶堆。 其中,对于序列S[1..n],及表示迭代器位置的index,大顶堆维护排序后的S[1..index-1],小顶堆维护排序后的S[index..n],例如S[1..n] = 1,2,3,4,5,6,7,index = 4,则大顶堆为{1,2,3},小顶堆为{4,5,6,7}为什么要这样维护呢?因为当小堆最小的元素都大于大堆最大的元素时,那么序列中排第index原创 2013-08-15 17:37:23 · 756 阅读 · 0 评论 -
poj 2559(单调栈)
题意:给定从左到右多个矩形,已知这此矩形的宽度都为1,长度不完全相等。这些矩形相连排成一排,求在这些矩形包括的范围内能得到的面积最大的矩形,打印出该面积。所求矩形可以横跨多个矩形,但不能超出原有矩形所确定的范围。单调栈:由提议得知,我们采用单调栈,顾名思义就是在入栈时遵循单调原则,可以求出一个元素向左(或向右)所能扩展到的最大长度,并不是说在这一段区间内是单调的,而是保证在该区间内该元原创 2013-08-16 18:50:16 · 742 阅读 · 0 评论 -
poj2325(贪心+大整数除法)
解题思路:简单的贪心,从最大9枚举到2,把最大的因子放在最低位,然后用大整数除法求出即可,注意0和1单独处理源码:#include #include #include using namespace std;char input[1001];int a[1001];int ans[1000010];int len;bool divid(int a[],int d){原创 2013-09-04 17:08:36 · 1492 阅读 · 0 评论 -
poj1159 LCS
设原序列S的逆序列为S' ,最少需要补充的字母数 = 原序列S的长度 — S和S'的最长公共子串长度几种不同的申请空间方法的区别:1. 静态数组 开销大小为5001*5001的int是铁定超的.2. 动态数组 单纯的申请动态数组是不能解决这个问题的,动态数组只能增加空间利用率,但是本题最恶劣的数组大小还是5001*5001,动态数组是不能改变这个事实的3.原创 2013-08-10 13:48:44 · 631 阅读 · 0 评论 -
poj1836
蓝色士兵的身高和红色士兵的身高是完全没有关系的。 要求最少出列数,就是留队士兵人数最大,如图,即左边的递增序列人数和右边的递减序列人数之和最大因而可转化为求“最长不降子序列”和“最长不升子序列”问题 但是不能直接套用LIS思想,因为这题不允许任一侧的序列中出现等高士兵 方法:对士兵的身高数组逐一进行枚举,枚举到的k值作为蓝色士兵,k+转载 2013-08-08 15:05:19 · 638 阅读 · 0 评论 -
二分图最大匹配:匈牙利算法(poj3041)
二分图最大匹配的König定理:最小点覆盖数 = 最大匹配数增广路的定义(也称增广轨或交错轨):若P是图G中一条连通两个未匹配顶点的路径,并且属于M的边和不属于M的边(即已匹配和待匹配的边)在P上交替出现,则称P为相对于M的一条增广路径。 由增广路的定义可以推出下述三个结论: 1、P的路径个数必定为奇数,第一条边和最后一条边都不属于M。原创 2013-07-26 10:37:06 · 701 阅读 · 0 评论 -
同余模定理解决大数问题(poj1426)
解题方法: BFS+同余模定理首先我们简单回顾一下 朴素搜索 法:n=6 1%6=1 (k=1){ (1*10+0)%6=4 (k=10){ (10*10+0)%6=4 (k=100) { (100*10+0)%6=4 (k=1000) (100*转载 2013-07-26 17:37:32 · 1065 阅读 · 0 评论 -
bfs+dfs(poj3083)
解题思路:定义四个方向 :上下左右以此为0123靠左走优先和靠右左优先用dfs最短路用bfs 注:不能以循环次数为迭代深度,这里应该是上次深度+1#include#includeusing namespace std;typedef struct S{ int r,c; int depth;}SE;SE s,e; //起止点int Lstep;原创 2013-07-26 22:04:50 · 751 阅读 · 0 评论 -
poj3126 bfs
水题解题思路: 按位枚举,40入口bfs,对于偶数剪枝,利用根号法判定素数,即n若能被[2,根号n]的数整出即不是素数源码:#include #include #include using namespace std;int a,b;typedef struct pr{ int prime; int depth;} num;bool visit[1原创 2013-07-27 12:00:30 · 646 阅读 · 0 评论 -
poj3009
很有意思的题,注意当碰撞完石头后,回溯要恢复石头,否则下一次再深搜时就WA了 。要注意题目中说明大于10步就impossible,我们在深搜时应该以此#include #include using namespace std;typedef struct S{ int r,c; bool status;//true运动false静止}SE;SE s,e;int w原创 2013-07-27 15:32:12 · 621 阅读 · 0 评论 -
poj1837(01背包)
解题思路:每向天平中方一个重物,天平的状态就会改变,而这个状态可以由若干前一状态获得。定义dp[i][j]为表示放入i个砝码后到达状态j的方法数。由于最重25,最多20个,长最多15,所以为25*20*15 = 7500,范围是-7500,7500,平横时j是0,但下标避免负数,为0-15000,平衡时为7500。所以状态转移方程:dp[i][ j+ w[i]*c[k] ]= ∑(原创 2013-07-29 16:55:07 · 671 阅读 · 0 评论 -
poj1014 (多重背包模板题)
模板procedure MultiplePack(cost,weight,amount) if cost*amount>=V CompletePack(cost,weight) return integer k=1 while k ZeroOnePack(k*cost,k*weight)原创 2013-08-05 13:49:01 · 988 阅读 · 0 评论 -
poj3260 (多重背包+完全背包)
买家的硬币是有限制的,是多重背包。卖家每种硬币没有限制,是完全背包。dp_buy[i]表示买家凑齐i需要的最少硬币个数。dp_sale[i]表示专家凑齐i需要的最少硬币个数。源码#include#include#define inf 1<<25using namespace std;int n,m,cnt[105],val[105];int dp_buy[20原创 2013-08-05 21:29:08 · 856 阅读 · 1 评论 -
LeetCode--Majority Element II & 多数投票算法
这个题目与另外一个题目很相似:Majority Element:给定一个整数数组,找出出现次数大于 n/2 的那个数。如果是找出出现次数大于n/2的数,解决这个问题的思路并不难,可以用Map扫描一遍,并且统计出现次数。但是这种方法的时间复杂度虽然是O(N),空间复杂度也相应的是O(N)。还有一种方法是多数投票算法,算法的名字虽然没听说过,但是思路相信大多数人还是知道的。如果coun原创 2016-07-26 22:52:59 · 427 阅读 · 0 评论