自定义博客皮肤VIP专享

*博客头图:

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

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

博客底图:

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

栏目图:

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

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

-+

yzl_rex

对于算法,我只是一个草民!

  • 博客(435)
  • 资源 (4)
  • 收藏
  • 关注

转载 开始你的ACM-ICPC之旅(转)

我觉得这样的文章应该有人写过的,但是Google里面貌似没有(或许有英文版)Baidu给了一个,不过不是很像样http://baike.baidu.com/view/94274.htm那我就写一个吧,这也是momodi大牛在上个学期初委托给我的一件事情。这篇文章面

2011-09-19 11:00:13 2633

原创 poj 2243 Knight Moves

//这题和1915是一样的题目,只不过这题的输入需要进行转换,还有这题没有给出具体的棋盘和棋子的//走法,如果对国际象棋不熟悉的人来讲,是很难读得明白题意的,棋盘和棋子的走法可以参照1915题! #include #include #include using namespace std;const int MAX = 15; map m; string input1, inpu

2012-09-02 09:13:05 844

原创 poj 1562 Oil Deposits

//和2386是一模一样的题目,当我在这题用c语言的输入的时候,就出错了,应该是有多个空格或者回车键在//数据的后面,还是不是很懂c语言的输入,特需要注意! #include #include using namespace std;const int MAX = 110;char matrix[MAX][MAX];int n, m, vis[MAX][MAX], ans;//每一

2012-09-02 08:30:02 770

原创 poj 2386 Lake Counting

#include #include using namespace std;const int MAX = 110;char matrix[MAX][MAX];int n, m, vis[MAX][MAX], ans;//每一个点的八个方向坐标的增减! int dir[8][2] = {{-1, -1}, {-1, 0}, {-1, 1}, {0, -1}, {0, 1}, {1,

2012-09-01 23:13:26 708

原创 poj 1915 Knight Moves

#include #include using namespace std;const int MAX = 310;int map[MAX][MAX], row, r, l, sx, sy, ex, ey;bool vis[MAX][MAX];//坐标的变换,即是可以移动的方格 int dir[8][2] = {{-2, -1}, {-2, 1}, {-1, -2}, {-1, 2}

2012-08-31 09:37:55 630

原创 poj 1321 棋盘问题

#include using namespace std;const int MAX = 10;char map[MAX][MAX];int vis[MAX], n, k, ans, sum;//地图的输入 void init(){ int i, j; for (i = 0; i < n; i++){ getchar();

2012-08-30 09:31:05 681

原创 poj 1154 LETTERS

#include #include using namespace std;const int MAX = 25;char matrix[MAX][MAX];int r, s, ans;bool vis[30];void init(){ int i, j; for (i = 0; i < r; i++){ getchar();

2012-08-29 16:24:33 662

原创 poj 1606 Jugs

#include #include #include using namespace std;const int MAX = 105;int a, b, n, vis[MAX][MAX], step[MAX*MAX], l, r;string opr[7] = {" ", "fill A", "fill B", "empty A", "empty B", "pour B A", "po

2012-08-29 10:36:02 658

原创 poj 3414 Pots

//和poj1606的题目的解法是一样的,不过有点地方需要注意,这题当没解的时候要输出impossible,还有无论是哪个杯的水的容量符合要求就可以输出了! #include #include #include using namespace std;const int MAX = 110;int a, b, c, r, l, vis[MAX][MAX], step[MAX*MAX];

2012-08-29 10:35:12 1251 1

原创 poj 3210 Coins

/*思路:若n为偶数: 1: 若初始状态为偶数正面 + 偶数反面,要想变成全正或全反,翻转的次数必为偶数。 例如: ○○●●●● 则翻转 2,4,6,8……次均可。 2: 若初始状态为奇数正面 + 奇数反面,要想变成全正或全反,翻转的次数必为奇数。 例如: ○○○○○● 则翻转 1,3(先将●翻为○,再将任一个○翻两下),5,7……次

2012-08-27 15:59:12 732

原创 poj 3278 Catch That Cow

#include #include #include using namespace std;const int MAX = 100001;int n, k, path[MAX];bool vis[MAX];void bfs(){ int tmp; queue q; //队列的初始化 while (q.size() != 0)

2012-08-27 15:20:08 491

原创 poj 1979 Red and Black

//这题属于简单的搜索题,可以分别用bfs和dfs来做! #include #include #include #include using namespace std;const int MAX = 25;char map[MAX][MAX];int i, j, w, h; int dir[4][2] = {{0, 1}, {0, -1}, {1, 0}, {-1, 0}}

2012-08-26 10:55:23 625

原创 poj 3974 Palindrome

#include #include const int MAX = 1000005;char str[MAX], Manacher_str[2*MAX];int len, tc = 0, p[2*MAX];using namespace std;void change(){ int i; Manacher_str[0] = '@'; Manacher

2012-08-26 08:47:37 828

原创 Manacher算法:求解最长回文字符串,时间复杂度为O(N)

回文串定义:“回文串”是一个正读和反读都一样的字符串,比如“level”或者“noon”等等就是回文串。回文子串,顾名思义,即字符串中满足回文性质的子串。经常有一些题目围绕回文子串进行讨论,比如POJ3974最长回文,求最长回文子串的长度。朴素算法是依次以每一个字符为中心向两侧进行扩展,显然这个复杂度是O(N^2)的,关于字符串的题目常用的算法有KMP、后缀数组、AC 自动机,这道题目

2012-08-26 08:44:57 35087 9

原创 poj 3637 Shopaholic

//贪心算法,简单! #include #include #include using namespace std;const int MAX = 20001;int prices[MAX];bool cmp(int a, int b){ return a > b;}int main(){ int i, tc, num, ans; scanf(

2012-08-24 20:52:18 1006

原创 poj 3664 Election Time

#include #include #include using namespace std;struct Info{ int index, fv, sv;}info[50001];bool cmp1(Info a, Info b){ return a.fv > b.fv;}bool cmp2(Info a, Info b){ retur

2012-08-24 18:56:16 857

原创 poj 3619 Speed Reading

#include using namespace std;int main(){ int n, k, s, t, r, i, j, ans, tmp, p; while (cin >> n >> k){ for (i = 0; i < k; i++){ cin >> s >> t >> r;

2012-08-24 16:21:56 834

原创 poj 3750 小孩报数问题

#include #include #include #include using namespace std;int main(){ int num, w, s, i, c; string name, tmp; queue q; queue ans; cin >> num; for (i = 0; i < num; i++){

2012-08-23 22:50:00 1034

原创 poj 3978 Primes

#include using namespace std;const int MAX = 100010;int prime[MAX];int main(){ int i, j, a, b, ans; prime[0] = false, prime[1] = false; for (i = 2; i < MAX; i++) prime[i] =

2012-08-22 18:19:54 690

原创 poj 3979 分数加减法

#include #include #include #include using namespace std;//求最大公约数 int gcd(int n, int m){ int tmp; if (n < m){ tmp = m; m = n; n = tmp; } while (n%m){

2012-08-22 12:54:25 818

原创 poj 3982 序列

#include #include #include using namespace std;string str[1000];int n;string solve(string str1, string str2, string str3){ int i, j, c, nn, len1, len2, len3, num1[100], num2[100], num3[

2012-08-22 09:58:39 621

原创 poj 3126 Prime Path

#include #include #include using namespace std;const int MAX = 100000;//竟然RE了三次,就是因为这里的MAX开小了! int step[MAX];bool prime[MAX];int base[4] = {1, 10, 100, 1000};int main(){ int i, j, tc, nu

2012-08-21 15:48:11 364

原创 poj 3173 Parkside's Triangle

#include using namespace std;const int MAX = 25;int triangle[MAX][MAX];int main(){ int n, s, i, j, k; bool flag = false; cin >> n >> s; for (i = 0; i <= n; i++){ for (j =

2012-08-21 12:05:15 926

原创 poj 3176 Cow Bowling

#include #include using namespace std;const int MAX = 400;short dp[MAX][MAX]; int main(){ int n, i, j; while (cin >> n){ for (i = 1; i <= n; i++){ for (j = 1;

2012-08-20 10:58:54 414

原创 poj 1163 The Triangle

#include #include using namespace std;const int MAX = 110;short dp[MAX][MAX]; int main(){ int n, i, j; while (cin >> n){ for (i = 1; i <= n; i++){ for (j = 1;

2012-08-20 10:49:34 313

原创 poj 1159 Palindrome

//这题的题意主要是要求我们求出给出的字符串和其反过来的字符串的最长公共子序列,//然后再用字符串的长度减去其最长公共子序列的长度就可以得出答案了! #include #include #include using namespace std;short dp[5010][5010]; int main(){ int i, j, len; char str1

2012-08-20 09:52:06 363

原创 poj 1080 Human Gene Functions

/*假设输入的字符串分别为 A,Bf[i][j] = { 从 A[i] 和 B[j] 开始匹配,所能达到的最大值 }假设 A[i] = G,B[j] = C那么现在的情况就是 GxxxxxCxxxxx状态转移为=> f[i + 1][j] + value(A[i], '-')G...-C..=> f[i][j + 1] + value(B[j], '-')-G..C..

2012-08-20 09:05:47 382

原创 最长公共子序列(LCS)的两种求解方法

#include #include using namespace std;const int MAX = 1000;int dp[MAX][MAX];int main(){ char str1[MAX], str2[MAX], LCS[MAX]; int i, j, len1, len2; while (1){ cin.getline(

2012-08-19 09:09:35 906

原创 poj 1836 Alignment

//好不容易才弄明白这题需要求解的答案是什么,之前一直都弄不明白题意!发觉这个博客http://cavenkaka.iteye.com/blog/1542421//分析得不错,就是通过看他的解释,才弄明白题目需要求解的答案! #include #include using namespace std;double height[1010];int lis[1010], lds[101

2012-08-18 23:32:25 338

原创 poj 3671 Dining Cows

//这题我以为是和3670是一模一样的题目,就直接将3670的代码复制过来,点知WA了一次,然后再看看题目//原来这一题只是求最长递增子序列就OK了,呵呵,抵死的WA,谁叫不读题! #include #include #include #include #include using namespace std; const int MAX = 30001; int num

2012-08-18 15:50:21 1118

原创 poj 3670 Eating Together

//最长递增子序列(LIS)和最长递减子序列(LDS)的解法其实是一样的,题目就是要求需要改动的次数最少,所以只要//求出其序列的最长递增子序列和最长递减子序列,通过比较就可以最长的子序列,从而就可以求出改动次数最少答案了! #include #include #include #include #include using namespace std; const int

2012-08-18 11:13:20 641

原创 poj 1631 Bridging signals

//求最长递增子序列,和题目2533、1887、3903等是同一类型的题目!做法差不多! #include #include #include using namespace std;const int MAX = 400010; int single[MAX], tmp[MAX]; int main(){ int tc, i, n, left, right, mi

2012-08-18 10:04:57 324

原创 最长递增子序列(LIS)的三种求解方法

//求最长递增子序列的方法有很多,下面就我接触到的三种方法来写一下实现代码:第一种方法是DP,//第二种是DP+二分查找,第三种是转换为求LCS的方法!而第二种的时间复杂度占优势:O(nlogn)! //第一种方法的DP代码: #include using namespace std;const int MAX = 100000;int dp[MAX];int main(){

2012-08-18 09:36:36 708

原创 poj 1887 Testing the CATCHER

//我都不敢相信,这是World Finals 1994的第二题,就是简单的LIS做法,只不过需要注意的地方确实很多,需要很细心, //而且需要有耐性去读懂题目!这题用二分+DP,0MS过了,数据还是比较弱的了!//求解LIS的两种方法都写了,第一种的效率明显要比第二种的效率要高,第一种时间复杂度为O(n^2),第二种时间复杂度为O(nlgn)! #include #include u

2012-08-17 20:54:20 516

原创 poj 3903 Stock Exchange

//和2533是同一类的题目,都是简单的LIS题目,这题用二分+DP比较好,因为数据比较大!容易超时! #include using namespace std;long num[100001], tmp[100001]; int main(){ int n, i, j, len, left, right, mid; while (cin >> n){

2012-08-17 20:02:09 1081

原创 poj 2533 Longest Ordered Subsequence

//有两种做法:一种是DP,另一种是二分查找! #include using namespace std;int num[1010], dp[1010];int main(){ int n, i, j, ans = 0; cin >> n; for (i = 0; i < n; i++){ cin >> num[i]; } f

2012-08-17 15:21:20 602

原创 poj 2853 Sequence Sum Possibilities

/*其实这个题目就是一个等差数列的问题嘛!连续数,公差为1,可以假设有i个元素的和为给定的num,用for循环依次遍历。然后根据等差数列求和num=i*a1+i*(i-1)*d/2, d即是公差1;可以根据判断a1%i是否为零,判定是否存在i个连续的整数的和为num,而且a1即是该等差数列的首项。如果是的话,则ans++*/#include #include using names

2012-08-16 23:55:53 1034

原创 poj 2140 Herd Sums

#include using namespace std;int main(){ int n, i, j, sum, cnt = 0; cin >> n; //经分析可知,其i的取值不可能大于n/2+1,那样范围就缩小了! for (i = 1; i <= n/2+1; i++){ sum = 0; for (j = i;

2012-08-16 21:24:23 1378

原创 qsort和sort的详解和比较函数的区别

下面先对qsort和sort进行详细的解释,然后再将区别!(需要特别注意的就是qsort和sort的比较函数的写法,很容易出错)First  qsort基本快速排序的方法,每次把数组分成两分和中间的一个划分值,而对于有多个重复值的数组来说,基本排序的效率较低。集成在C语言库函数里面的的qsort函数,使用三路划分的方法解决这个问题。所谓三路划分,是指把数组划分成小于划分值,等于划分

2012-08-16 18:17:53 10688 2

原创 poj 1844 Sum

//这题如果仔细一点儿分析,结果就出来了!题意:给出一个数,通过从1到N的连续数的运算而得出这个数//(两个数之间的符号只可以是+或-),求最小的N。 //先通过求从1到N的前N项和,如果是小于这个num数的,肯定满足不了,所以继续相加!如果是可以等于num的情况之下,就得出了结果,可以输出!//如果找不到相加和等于num这个数的,就肯定是大于这个num数的了,就只有通过变换数与数之间的符号

2012-08-16 11:09:12 770

masm.exe link.exe

是汇编语言中需要用到的编译文件masm.exe 和链接文件link.exe

2011-12-08

麻省理工大学的算法导论(英文版)

该书为麻省理工大学的“算法导论”,为英文版,希望可以带给你们方便!

2011-08-21

数据结构算法与应用-C++语言描述

这是一本用c++语言来描述关于数据结构算法与应用的基础书籍,对于刚刚接触算法的人来说,打好基础最重要!

2011-08-19

空空如也

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

TA关注的人

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