IT民工
加油!

随笔分类 -  POJ

上一页 1 2 3 4 5 6 下一页
刷集训手册
POJ 2250 Compromise
摘要:求文本的最长公共子序列,序列中每个元素都是一个字符串,学习了记录路径和递归输出的方法。/*Accepted 224K 0MS C++ 1186B 2012-04-11 11:19:14 */#include<cstdio>#include<cstring>#include<cstdlib>#define MAXN 105#define MAXM 31int f[MAXN][MAXN];char a[MAXN][MAXM], b[MAXN][MAXM];int mark[MAXN][MAXN];int na, nb, cnt;void output( int 阅读全文
posted @ 2012-04-11 11:24 找回失去的 阅读(245) 评论(0) 推荐(0)
POJ 1458 Common Subsequence
摘要:求最长公共子序列,题目居然没有给出字符串最大长度。/*Accepted 428K 0MS C++ 570B 2012-04-11 10:26:03 */#include<cstdlib>#include<cstring>#include<cstdio>#define MAXN 1 << 8#define max(a, b) ( a > b ? a : b)char X[MAXN], Y[MAXN];int f[MAXN][MAXN];int x, y;void dp(){ memset( f, 0, sizeof f); x = strle 阅读全文
posted @ 2012-04-11 10:29 找回失去的 阅读(132) 评论(0) 推荐(0)
POJ 1163 The Triangle
摘要:简单的数塔,用记忆化搜索或者递推都可以。/*Accepted 260K 16MS C++ 601B 2012-04-11 10:12:15 */#include<cstring>#include<cstdlib>#include<cstdio>#define MAXN 105#define max(a, b) ( a > b ? a : b)int d[MAXN][MAXN], a[MAXN][MAXN];int n;void init(){ for( int i = 1; i <= n; i ++) for( int j = 1; j < 阅读全文
posted @ 2012-04-11 10:14 找回失去的 阅读(167) 评论(0) 推荐(0)
POJ 2081 Recaman's Sequence
摘要:这是一道要打表的递推题。注意数组开得足够大就行。#include<cstdio>#include<cstring>#include<cstdlib>bool vis[4000000] = {false};//记录一个数是否出现在结果中int a[500005];void init(){ a[0] = 0; for( int i = 1; i <= 500000; i ++) { if( a[i - 1] - i > 0 && !vis[ a[i - 1] - i]) a[i] = a[i - 1] - i; else ... 阅读全文
posted @ 2012-04-11 10:02 找回失去的 阅读(230) 评论(0) 推荐(0)
POJ 1579 Function Run Fun
摘要:很基础的一个记忆化搜索,但是还是出了点小问题,数组只开到了25.但是我居然想记忆50的值,所以判断返回要从第三种情况开始,前面两种直接返回给定的值。/* Accepted 236K 0MS C++ 717B 2012-04-11 09:39:09 */#include<cstdio>#include<cstring>#include<cstdlib>int w[25][25][25];int dfs( int a, int b, int c){ if( a <= 0 || b <= 0 || c <= 0) return 1; if( a 阅读全文
posted @ 2012-04-11 09:44 找回失去的 阅读(154) 评论(0) 推荐(0)
POJ 1050 To the Max
摘要:这是一道求最大子矩阵和的题,之前做过求最大一维数列连续和,所以可以将每列压缩到一列,将二维变成一维,这样枚举所有的情况,找到一个一维最大连续和即可。/* Accepted 216K 32MS C++ 775B 2012-04-11 09:05:12 */#include<cstdio>#include<cstring>#include<cstdlib>#define MAXN 105#define max(a, b) ( a > b ? a : b)const int inf = 0x3f3f3f3f;int t[MAXN][MAXN], a[MAXN 阅读全文
posted @ 2012-04-11 09:13 找回失去的 阅读(169) 评论(0) 推荐(1)
POJ 2226 Muddy Fields
摘要:这道题是最小点覆盖的题,用最少的木板将泥地覆盖。我们建图时将横的线段看成二分图的X点,将竖线段看成Y点。将每个横线段和竖线段编号,编号之后将有交点的横线段和竖线段连一条边,求出最大匹配。最小点覆盖=最大匹配。/*Accepted 2440 KB 16 ms C++ 2186 B 2012-07-28 16:18:28*/#include<cstdio>#include<cstring>#include<cstdlib>const int MAXN = 55;int xM[MAXN * MAXN / 2], yM[MAXN * MAXN / 2];bool g 阅读全文
posted @ 2012-04-05 23:59 找回失去的 阅读(356) 评论(0) 推荐(0)
POJ 3020 Antenna Placement
摘要:http://poj.org/problem?id=3020 无向图的最小路径覆盖,问我们每两个相邻的城市可以共用一个无线,最少要多少个无线设备。我们将每个城市编号,相邻的城市连一条边,每个城市都是X中的结点也是Y当中的结点,求出最大匹配后,利用无向图最小路径覆盖的公式:顶点数 – 最大匹配 / 2 = 最小路径覆盖。/*Memory: 976K Time: 16MSLanguage: C++ Result: Accepted*/#include<cstring>#include<cstdio>#include<cstdlib>const int MAXD 阅读全文
posted @ 2012-04-04 17:01 找回失去的 阅读(187) 评论(0) 推荐(0)
POJ 2594 Treasure Exploration(允许路径重叠的最小路径覆盖)
摘要:http://poj.org/problem?id=2594 允许路径重叠的最小路径覆盖,将连通的点(有向)都连成边,这个用floyd来处理,再用匈牙利算法求出最大匹配,最后用公式求出最小路径覆盖。 公式: 顶点数 – 最大匹配 = 最小路径覆盖。/*Memory: 428K Time: 782MSLanguage: C++ Result: Accepted*/#include<cstring>#include<cstdio>#include<cstdlib>const int MAXD = 505;int n, m;bool map[MAXD][MAXD] 阅读全文
posted @ 2012-04-04 16:24 找回失去的 阅读(209) 评论(0) 推荐(0)
POJ 3041 Asteroids (最小点覆盖)
摘要:http://poj.org/problem?id=3041给一个N*N的矩阵,有些格子有障碍,要求我们消除这些障碍,问每次消除一行或一列的障碍,最少要几次。这里将每行x看成一个X结点,每列Y看成一个Y结点,障碍的坐标x,y看成X到Y的一条边,构建出图后,就变成了找最少的点,使得这些点与所有的边相邻,即最小点覆盖问题。又继续敲了一遍匈牙利算法…/*Memory: 424K Time: 47MSLanguage: C++ Result: Accepted*/#include<cstdio>#include<cstring>#include<cstdlib>#d 阅读全文
posted @ 2012-04-04 13:59 找回失去的 阅读(2713) 评论(0) 推荐(2)
POJ 1679 The Unique MST
摘要:求出次小生成树与最小生成树比较,如果相等则不唯一,否则输出最小生成树的权值。这道题整整花了两个小时的时间,用的是prim算法,用Tlink记录边是否在MST中,然后枚举不在树中的边,用其权值w[u][v]代替max[u][v]。max[u][v]是MST中连结两点u,v唯一的路中权值最大的那条边的权值。/*Memory: 272K Time: 0MSLanguage: C++ Result: Accepted*/#include<cstdio>#include<cstring>#include<cstdlib>const int inf = 0x3f3f3f 阅读全文
posted @ 2012-04-04 11:55 找回失去的 阅读(285) 评论(0) 推荐(0)
POJ 1469 COURSES
摘要:这道题要我们找到p门课和n个学生是否存在一种关系,即在一个集合中的学生,每人代表一门课,每门课在这个集合中也有一个代表。求的的最大匹配数是否等于课程总数。#include<cstdio>#include<cstring>#include<cstdlib>#define MAXN 305bool map[105][MAXN], vis[MAXN];int link[MAXN];int p, n;bool dfs(int u){ int v; for( v = 1; v <= n; v++) if( map[u][v] && !vis[v] 阅读全文
posted @ 2012-04-03 22:06 找回失去的 阅读(166) 评论(0) 推荐(0)
POJ 1422 Air Raid
摘要:http://poj.org/problem?id=1422题意:派一些伞兵去那个镇里,要到达所有的路口,有一些或者没有伞兵可以不去那些路口,只要其他人能完成这个任务。每个在一个路口着陆了的伞兵可以沿着街去到其他路口。我们的任务是求出去执行任务的伞兵最少可以是多少个。一个路径覆盖的问题:在一个有向图中,路径覆盖就是在图中找一些路径,使之覆盖了图中的所有顶点,且任何一个顶点有且只有一条路径与之关联;(如果把这些路径中的每条路径从它的起始点走到它的终点,那么恰好可以经过图中的每个顶点一次且仅一次);同样是求出二分图最大匹配数,代码和刚才的差不多,有这样一个公式 //最小路径覆盖 = 顶点... 阅读全文
posted @ 2012-04-03 16:48 找回失去的 阅读(419) 评论(0) 推荐(0)
POJ 3230 Travel
摘要:http://poj.org/problem?id=3230 同样是一道DP的题,但是这道题确实想了很久,还是在staginner大牛的提醒下才想出来的,题目给的数据有ex[i][j]从i到j城市的花费,inc[i][j]为第i天在j城市的收入。状态转移方程为:f[i][j] =max( f[i-1][k] + inc[i][j] – ex[k][j] ). 其中f[i][j]代表的是第i天呆在j城所获到的最大收入。再遍历一遍求的的f值就知道m天呆在哪个城市的收入最大了!/*Problem: 3230 User: CSU_ACM1174Memory: 304K Time: 16MSLan... 阅读全文
posted @ 2012-04-02 18:22 找回失去的 阅读(471) 评论(1) 推荐(0)
POJ 1160 Post Office
摘要:http://poj.org/problem?id=1160 这是一道DP的题,用w[i][j]代表用一个邮局覆盖第i个到第j个点所得到的最小距离和。用f[i][j]代表用前i个邮局覆盖前j个点所得到的最小距离和。然后根据这里我们可以推出状态转移方程为:f[i][j] = min( f[i][j ] , f[i - 1][k] + w[k + 1][j] ) ( k < j)./*Accepted 528K 79MS C++ 1195B 2012-08-07 14:23:15*/#include<stdio.h>#include<string.h>#includ. 阅读全文
posted @ 2012-04-02 18:12 找回失去的 阅读(181) 评论(0) 推荐(0)
POJ 3259-Wormholes
摘要:http://poj.org/problem?id=3259 题意大致是N个点,M条正常的边(双向)边权为正,W个虫洞,边权为负,想要我们判断回路中是否存在一个负圈。学习了bellman-ford算法来求负环,松弛结束后判断是否存在最短路,不存在则有负环。#include <stdio.h>#include <string.h>#include <stdlib.h>const int maxn = 1 << 9, inf = 0x3f3f3f3f;int dist[maxn];int N, M, W, es;struct Edge{ int u, 阅读全文
posted @ 2012-04-02 10:58 找回失去的 阅读(227) 评论(0) 推荐(1)
POJ 2485-Highways
摘要:http://poj.org/problem?id=2485 这是道最小生成树的题目,求的是最小生成树中最大边的权值。开始就想到用kruskal算法去做,因为边是从小到大排序的,所以保证最后一条加入生成树的边的权值是最小生成树当中最大的。Kruskal仅排序用的时间是O(mlog m),其中m 为n^2数量级的,为边的总数。 再说说prim算法,这个算法严格来说是今天才学的。在我看来,prim算法的精髓在于传递,建立最小生成树的方法就是一个传递的过程,先将编号为0的点作为树根,然后找到离0最近的一点j,加入生成树中,然后找离j最近的,每次都要更新lowc的值。找最大边的权值话就每次用加入的m. 阅读全文
posted @ 2012-03-31 23:03 找回失去的 阅读(244) 评论(0) 推荐(1)
POJ 1017-Packets
摘要:这本来是一个简单的贪心题,但是我写的有点罗嗦了,这题只要把握住三点就行了:1. a/b是向下去整,我们要事先将a 变成 a+b-1,这样除法才不会错误。2. 把握6 * 6的箱子能放几个 各种类型的物品。3. 从大的放起,剩余空间要利用好,也就是要贪心。#include<cstdio>#include<cstring>#include<cstdlib>int a[7] = { 0};int res[5] = { 0};int ans;int main(){ while( scanf( "%d", &a[1]) == 1) { fo 阅读全文
posted @ 2011-12-17 23:44 找回失去的 阅读(248) 评论(0) 推荐(0)
POJ 1088-滑雪
摘要:矩阵里的数字代表当前点的高度,只能从高的点滑到低的点,求最长能滑的距离。初始点不规定。我们可以向每个点的四周搜索,能走则就在当前距离加1。并将已经求的值保存在二维数组中。(记忆化搜索)/*Accepted 252K 47MS C++ 1158B 2012-07-23 16:13:17*/#include<cstdio>#include<cstdlib>#include<cstring>#include<algorithm>using namespace std;const int MAXN = 105;const int dx[] = {0, 0 阅读全文
posted @ 2011-12-15 23:27 找回失去的 阅读(136) 评论(0) 推荐(0)
POJ 3620-Avoid The Lakes
摘要:http://poj.org/problem?id=3620学长说这道题是广搜题,但是貌似用深搜做更容易,将被淹了的点标记为true,然后对其上下左右4个点进行深搜,找到相连的最多的点。/*Accepted 288K 47MS C++ 1080B 2012-07-23 12:20:58*/#include<cstdio>#include<cstring>#include<cstdlib>#include<algorithm>using namespace std;const int MAXN = 105;const int dx[] = { 1, 阅读全文
posted @ 2011-12-13 20:32 找回失去的 阅读(216) 评论(0) 推荐(0)

上一页 1 2 3 4 5 6 下一页