![](https://img-blog.csdnimg.cn/20201014180756780.png?x-oss-process=image/resize,m_fixed,h_64,w_64)
poj
文章平均质量分 66
hzasrd
这个作者很懒,什么都没留下…
展开
-
poj2253 Frogger
题意是让求从源点到目标点青蛙每次跳跃的最小距离是多少,并且可以借助中间的石块。这道题类似于poj1797,用Floyd来做就很简单了。可以转变为用所给的石块的坐标来求出每两个点之间的距离,以此为边来构建一个无向图,求出从源点到目标点每次跳跃的最小距离是多少。注意这个时候边的松弛条件就要相应的改变为如果(e[i][j]>Max(e[i][k],e[k][j])),则更新e[i][j];最后输出e原创 2016-07-22 14:03:30 · 306 阅读 · 0 评论 -
poj1836 Alignment(LIS)
题意:士兵拍成一行,让最少的士兵出列,使得每个士兵都能看到至少一个最边上(最左边或者最右边)的士兵(中间某个人能看到最边上的士兵的条件是该士兵的身高一定大于他某一边所有人的身高)。 刚开始没看懂题,真失败= =思路:形成的这个序列应当先上升后下降,只需要判断一下顶点在哪的时候可以向左或向右看到的士兵数最多,也就是出列的士兵最少。这道题可以正着计算一下最长上升子序列,存到dp数组中,再逆着计原创 2016-09-03 20:38:50 · 362 阅读 · 0 评论 -
lightoj1058 && poj1791 求平行四边形个数
DescriptionThere are n distinct points in the plane, given by their integer coordinates. Find the number of parallelograms whose vertices lie on these points. In other words, find the number of 4-原创 2016-08-13 19:39:45 · 396 阅读 · 0 评论 -
poj3126 Prime Path(BFS水)
感觉似乎是水过去了?还是说这道题太水了,写完没调试测试样例正确,提交一遍过= =思路:先素数打表,然后在进行BFS搜索,每次改变一个数字,是素数的话就加入队列中去,直到搜到最后;#include#include#include#include#include#include#include#include#define INF 1<<30#define N 10009u原创 2016-09-28 12:56:27 · 288 阅读 · 0 评论 -
poj3069 Saruman's Army(贪心,水)
DescriptionSaruman the White must lead his army along a straight path from Isengard to Helm’s Deep. To keep track of his forces, Saruman distributes seeing stones, known as palantirs, among the原创 2016-10-16 11:53:47 · 200 阅读 · 0 评论 -
poj3253 Fence Repair(优先队列)
题意:农夫锯木头,将一根木头锯成要求的n段,每一次锯木头的花费为本次所锯的木头的长度,问如果锯成要求的n段需要的花费总共为多少。贪心,数据刚开始给出n段木头,将n段木头加入队列,可以每次将最短的两段合并起来,将合并后的加入队列并累加花费,然后继续上述操作,一直到队列中剩下一根木头。这里用到了优先队列会方便很多,每次将最小的出队。priority_queueint,vectorint原创 2016-10-20 14:47:06 · 297 阅读 · 0 评论 -
算法模板之最近公共祖先问题(LCA)
poj1330最近公共祖先问题模板:#include#include#include#include#include#include#include#include#define N 30000using namespace std;int id[N],vis[N],depth[N],in[N],dp[N][20],k;vectorG[N];int Min(原创 2017-08-10 17:34:19 · 268 阅读 · 0 评论 -
poj 1703 Find them, Catch them(种类并查集)
The police office in Tadu City decides to say ends to the chaos, as launch actions to root up the TWO gangs in the city, Gang Dragon and Gang Snake. However, the police first needs to identify which g原创 2017-08-22 16:02:19 · 198 阅读 · 0 评论 -
poj1609 Tiling Up Blocks(LIS)
题意:堆积木,就像乐高玩具那种的,下面有凹陷处,上面有突出处,这样两块积木就可以拼接了。每个积木上下的左边和中间都有拼接处,规则是下面的积木的插孔必须大于或者等于上面的插孔时,才可以堆放;问最多可以堆放多高;简单的最长不下降子序列,注意上下可以相等,和之前做过的最长上升子序列略有不同,数据10000,n^2会超时(这道题数据很弱,如果用n^2的方法来写也能过),所以用nlogn的方法来写,利用原创 2016-09-04 11:31:05 · 574 阅读 · 0 评论 -
poj2406 Power Strings
KMP前缀数组的理解与应用(二)#include#include#include#define N 1000010char s[N];int next[N];void Creat_next(){ int len=strlen(s); int j=0; for(int i=1; i<len; i++) { while(j>0&&s[i原创 2016-08-05 20:47:26 · 197 阅读 · 0 评论 -
poj2752 Seek the Name, Seek the Fame
KMP前缀数组的理解与应用(一)poj2752,#include#include#include#define N 400100char s[N];int a[N],next[N];void Creat_next(){ int len=strlen(s); int j=0; for(int i=1;i<len;i++) { whil原创 2016-08-05 20:46:22 · 215 阅读 · 0 评论 -
poj3264 Balanced Lineup(线段树orRMQ)
题意很简单,给你n个数,有m个询问,每次询问从l到r这个区间内,最大值减去最小值答案是多少;数据有点大,暴力肯定会超时;这道题可以有两种方法来写,先说一下代码比较简单的方法,RMQ,它先用了dp打表,然后询问区间直接查找:#include#include#include#includeint dpmin[50005][20],dpmax[50005][20],a[50005];i原创 2016-08-12 11:40:25 · 219 阅读 · 0 评论 -
1061:青蛙的约会
解题思路:因为可以把路径看成一个环,那么对青蛙每次跳跃后再对路径的长度取模,就是青蛙此时的坐标。判断两者青蛙坐标是否相等,相等的话输出坐标就行。如果两只青蛙在同时回到起点时还没有相遇,则永远不能相遇;#include#include#include#include#include#define N 110using namespace std;int main(){原创 2016-07-30 20:03:54 · 248 阅读 · 0 评论 -
poj3660 Cow Contest
题意大致为,给你N头牛,他们之间进行进行M场比赛来确定排名,如果A赢B,B赢C,相应的可以确定A赢C;问最后可以确定排名的牛共几头;可以用Floyd算法来解决,利用一个中间变量k,用e[i][j]来表示i与j之间的比赛结果,若i与j之间有比赛,则e[i][j]=1;制作一个有向图,若i赢j,则顶点i指向顶点j有一条路;最后求出每个顶点的出度和入度之和,看是否等于n-1,若等,则可以确定此牛原创 2016-07-22 11:53:47 · 247 阅读 · 0 评论 -
poj1797 Heavy Transportation
题目让求从源点到N的最大载重量,这是一道最短路Dijkstra的变形,稍加改动就可以了。#include#includeint b[1100],dis[1100],e[1100][1100];int Min(int a,int b){ return a<b?a:b;}int main(){ int m,n,t1,t2,t3,i,j,v,u,max,T,k;原创 2016-07-21 17:55:46 · 237 阅读 · 0 评论 -
poj2387 Til the Cows Come Home
最短路模板题,套用模板就行。#include#includeint b[1100],dis[1100],e[1100][1100];int main(){ int m,n,t1,t2,t3,i,j,v,u,min; int inf=99999999; while(~scanf("%d%d",&m,&n)) { for(i=1; i<=原创 2016-07-21 17:49:23 · 248 阅读 · 0 评论 -
poj1511Invitation Cards
题目让求从起始点到各个路口来回花费的钱之和的最小值是多少,类似于poj3268,正着建个图,再反向建个图,计算两者的最小值之和就可以了;但是这道题数据比较大,用邻接矩阵会超时也会爆内存,需要用邻接表来建图;要注意题目给的数据过于大,注意类型溢出以及合适的inf值;#include#include#include#include#define N 1000006const int in原创 2016-07-26 18:08:45 · 732 阅读 · 0 评论 -
poj3259 Wormholes(bellman负权处理)
思路:用bellman建立无向边,然后将虫洞的边置为负值求最短路,在进行n-1次松弛后,判断是否还能继续松弛。如果可以,则有负权回路,则可以在出发前回到原地,输出YES,否则,NO;#include#include#include#include#define N 6000//建立无向边时注意N的范围相应的扩大为二倍int u[N],v[N],w[N],dis[N];int n,m原创 2016-07-26 20:56:38 · 251 阅读 · 0 评论 -
poj3278 Catch That Cow(BFS)
一道bfs题,可以通过搜索+1、-1、*2这三种情况来判断,bfs是广度搜索,当第一次n==k时,就是最小的步骤,可直接输出;这里用c++的队列来写比较方便,无奈弱暂时不会,就手动写了一个数组模拟队列的进出= =下面贴上代码:#include#include#include#include#define N 200010int n,k;int b[N],que[N],ste原创 2016-07-27 18:51:04 · 242 阅读 · 0 评论 -
poj1537 Robot Motion
题意很清楚,就是一道搜索的题,按照字母代表的方向走,一步步来就行了,把走过的点从0开始依次变为0、1、2、3、……,当出边或者又再次碰到相同的点时候返回;#include#include#include#includeint m,n,st,step,flag;int b[50][50],a[50][50];char s[50][50];int dfs(int x,int y){原创 2016-07-27 19:02:38 · 272 阅读 · 0 评论 -
poj3368 Frequent values(RMQ)
给你一串序列,再给你一个区间,求在这个区间内同一个数字出现频率最高的是多少,序列是非递减的序列;比如,-1 -1 1 1 1 1 3 10 10 10,在区间(5,10)中,出现频率最高的数字是10,频率为3,因此答案为3;一道RMQ的题目,解题思路写在代码注释里;#include#include#include#include#define N 100010int d原创 2016-07-28 15:12:14 · 297 阅读 · 0 评论 -
poj1961 Period
KMP前缀数组的理解与应用(三)#include#include#include#define N 1000010char s[N];int next[N];void Creat_next(int n){ int j=0; for(int i=1; i<n; i++) { while(j>0&&s[i]!=s[j])原创 2016-08-05 20:48:34 · 192 阅读 · 0 评论 -
poj1088 滑雪(简单dp+搜索+二维最长下降子序列)
DescriptionMichael喜欢滑雪百这并不奇怪, 因为滑雪的确很刺激。可是为了获得速度,滑的区域必须向下倾斜,而且当你滑到坡底,你不得不再次走上坡或者等待升降机来载你。Michael想知道载一个区域中最长底滑坡。区域由一个二维数组给出。数组的每个数字代表点的高度。下面是一个例子 1 2 3 4 516 17 18 19 615 24 25 20 714原创 2016-09-10 11:03:50 · 6655 阅读 · 1 评论 -
poj3461 Oulipo(KMP)
字符串处理,很简单的一道KMP算法模板;#include#include#include#define N 1000010int next[N];char str1[10009],str2[N];void creat_next(char *str1){ int len=strlen(str1); next[0]=0; int j=0; for(int原创 2016-08-02 22:00:43 · 258 阅读 · 0 评论