ACM算法
ACM算法
昔拉天使
I wanna the world know my existence.
展开
-
动态规划入门到熟悉
斐波那契系列问题在数学上,斐波纳契数列以如下被以递归的方法定义:F(0)=0,F(1)=1, F(n)=F(n-1)+F(n-2)(n>=2,n∈N*)根据定义,前十项为1, 1, 2, 3, 5, 8, 13, 21, 34, 55例1:给定一个正整数n,求出斐波那契数列第n项(这时n较小)解法一:完全抄定义def f(n): if n==1 or n==2: retu...原创 2020-02-25 19:05:02 · 480 阅读 · 0 评论 -
ACM算法模板2
涵盖了ACM竞赛的大多数常用算法,算法较多可以直接搜索查询Floyd求最小环令e(u, v)表示u和v之间的连边,令min(u, v)表示删除u和v之间的连边之后u和v之间的最短路, 最小环则是min(u, v) + e(u, v). 时间复杂度是 O(EV^2). 改进算法 在floyd的同时,顺便算出最小环 g[i][j]=i, j之间的边长dist:=g;for k:=1 ...原创 2020-02-07 06:42:35 · 292 阅读 · 0 评论 -
ACM 算法模板
ACM 算法模板Dinic算法求网络流#include #include <string.h>#include using namespace std;int const inf = 0x3f3f3f3f;int const MAX = 205;int n, m;int c[MAX][MAX], dep[MAX];//dep[MAX]代表当前层数int bfs(in...原创 2020-02-07 05:33:37 · 1064 阅读 · 0 评论 -
卡特兰数解释
1简介卡特兰数又称卡塔兰数,英文名Catalan number,是 组合数学中一个常出现在各种计数问题中出现的 数列。由以 比利时的数学家欧仁·查理·卡塔兰 (1814–1894)命名,其前几项为 : 1, 1, 2, 5, 14, 42, 132, 429, 1430, 4862, 16796, 58786, 208012, 742900, 2674440, 9694845, 353576...原创 2013-11-29 15:05:00 · 233 阅读 · 0 评论 -
母函数详解
详解:在数学中,某个序列的母函数是一种形式幂级数,其每一项的系数可以提供关于这个序列的信息。使用母函数解决问题的方法称为母函数方法。母函数可分为很多种,包括 普通母函数、 指数母函数、 L级数、 贝尔级数和 狄利克雷级数。对每个序列都可以写出以上每个类型的一个母函数。构造母函数的目的一般是为了解决某个特定的问题,因此选用何种母函数视乎序列本身的特性和问题的类型。这里先给出两句话,不懂...原创 2013-12-15 15:03:00 · 380 阅读 · 0 评论 -
中国剩余定理的完美演绎
问题描述 人自出生起就有体力,情感和智力三个生理周期,分别为23,28和33天。一个周期内有一天为峰值,在这一天,人在对应的方面(体力,情感或智力)表现最好。通常这三个周期的峰值不会是同一天。现在给出三个日期,分别对应于体力,情感,智力出现峰值的日期。然后再给出一个起始日期,要求从这一天开始,算出最少再过多少天后三个峰值同时出现。问题分析 首先我们要知道,任意两个...原创 2013-10-18 17:03:00 · 109 阅读 · 2 评论 -
A + B Problem II
Problem DescriptionI have a very simple problem for you. Given two integers A and B, your job is to calculate the Sum of A + B.InputThe first line of the input contains an integer T(1&l...原创 2013-11-15 07:49:00 · 118 阅读 · 0 评论 -
广搜入门题hdu 1548
A strange liftProblem DescriptionThere is a strange lift.The lift can stop can at every floor as you want, and there is a number Ki(0 <= Ki <= N) on every floor.The lift have just two bu...原创 2013-11-15 17:15:00 · 106 阅读 · 0 评论 -
优先队列广搜 hdu 1242
RescueProblem DescriptionAngel was caught by the MOLIGPY! He was put in prison by Moligpy. The prison is described as a N * M (N, M <= 200) matrix. There are WALLs, ROADs, and GUARDs in the...原创 2013-11-15 21:27:00 · 83 阅读 · 0 评论 -
拐点数限制的搜索
http://acm.hdu.edu.cn/showproblem.php?pid=1175拐点数限制的搜索,最近专练广搜,以为这个问题也可以用广搜解决,做了半天拐点限制的广搜最后是这个结果看了下DISCUSS似乎用DFS能很好解决,引以为戒code:#include <stdio.h>#include "queue.h"#include "memory....原创 2013-11-16 01:35:00 · 120 阅读 · 0 评论 -
hdu 1312深搜入门题
Red and BlackProblem DescriptionThere is a rectangular room, covered with square tiles. Each tile is colored either red or black. A man is standing on a black tile. From a tile, he can move to...原创 2013-11-16 02:42:00 · 89 阅读 · 0 评论 -
深搜入门之素数环 hdu 1016
http://acm.hdu.edu.cn/showproblem.php?pid=1016#include <stdio.h>#include "math.h"#include "memory.h"int prime[40]={0,1,1,1,0,1,0,1,0,0,0,1,0,1,0,0,0,1,0,1,0,0,0,1,0,0,0,0,0,1,0,1,0,0,0...原创 2013-11-16 06:20:00 · 78 阅读 · 0 评论 -
hdu 1175续
带拐点搜索,用广搜内存超出后用深搜,无限超时,还没有考虑到所有可能出现的情况,最后终于用最水最水的方法水过。。。一个人努力真是辛苦啊http://acm.hdu.edu.cn/showproblem.php?pid=1175#include <stdio.h>#include "memory.h"int map[1001][1001];int vit[10...原创 2013-11-16 14:52:00 · 722 阅读 · 0 评论 -
写了一段时间的ACM后心得
发现搞测试的难度要大于搞开发呀,要考虑各种可能出现的情况。感觉总是会漏掉一些BUG。比如:这题连连看Problem Description“连连看”相信很多人都玩过。没玩过也没关系,下面我给大家介绍一下游戏规则:在一个棋盘中,放了很多的棋子。如果某两个相同的棋子,可以通过一条线连起来(这条线不能经过其它棋子),而且线的转折次数不超过两次,那么这两个棋子就可以在棋盘上消去。不...原创 2013-11-16 15:03:00 · 106 阅读 · 0 评论 -
hdu 2112最短路的dijkstra实现
http://acm.hdu.edu.cn/showproblem.php?pid=2112能够改变传统数字表示位置的模式用文字来描述城市求最短路code:#include <stdio.h>#include "string.h"#define MAX 160#define INT_MAX 99999999char s[160][160]; ...原创 2013-11-16 18:01:00 · 85 阅读 · 0 评论 -
hdu 3665 最短路floyd实现
http://acm.hdu.edu.cn/showproblem.php?pid=3665题目意思读了半天。。。英语真是不够过关,算法倒是不难实现这题的测试数据太弱了,原本提交了个并不怎么完美的代码却能通过。。。code:#include <stdio.h>#define INF 1000000int map[15][15];int n;vo...原创 2013-11-16 20:38:00 · 102 阅读 · 0 评论 -
hdu 1166数状数组
http://acm.hdu.edu.cn/showproblem.php?pid=1166code :#include <iostream>#include "string.h"#include "stdio.h"#include "memory.h"using namespace std;int n,c[50005];int lowbit(int x)...原创 2013-11-17 09:18:00 · 93 阅读 · 0 评论 -
hdu 1728(广搜)
http://acm.hdu.edu.cn/showproblem.php?pid=1728方法应该没问题,错误找不出来。。彻底败在测试上了。code:#include <stdio.h>#include "iostream.h"#include "queue.h"#include "memory.h"char map[105][105];int v...原创 2013-11-17 13:52:00 · 96 阅读 · 0 评论 -
hdu 1728(续)
http://acm.hdu.edu.cn/showproblem.php?pid=1728参考网上大神的代码后,修改了vit数组的用法后就没问题了。。。又学到新东西了代码似乎不用写得这么长,以后再碰到类似的题再做下更进吧、vit[max][max]//保存最小拐弯次数http://blog.csdn.net/w00w12l/article/details/...原创 2013-11-17 15:10:00 · 107 阅读 · 0 评论 -
hdu4528,带回路的广度搜索???
http://acm.hdu.edu.cn/showproblem.php?pid=4528果断通不过这凶残的数据啊,居然还可以往回走130 31 95S................................X...............................X...............................X............原创 2013-11-17 22:34:00 · 98 阅读 · 0 评论 -
巴什博奕
巴什博奕(Bash Game):只有一堆n个物品,两个人轮流从这堆物品中取物,规定每次至少取一个,最多取m个。最后取光者得胜。显然,如果n=m+1,那么由于一次最多只能取m个,所以,无论先取者拿走多少个,后取者都能够一次拿走剩余的物品,后者取胜。因此我们发现了如何取胜的法则:如果n=(m+1)r+s,(r为任意自然数,s≤m),那么先取者要拿走s个物品,如果后取者拿走k(≤m)个,那么...原创 2013-11-19 17:54:00 · 138 阅读 · 0 评论 -
hdu 2084动态规划入门题
入门级的动态规划,注意状态的改变数组shu表示i行数塔,第j列保存的最大值code:#include <stdio.h>#include "memory.h"int max(int a,int b){ if(a>b) { return a; }else{ return b; }}int main(int argc, char *a...原创 2013-11-20 16:04:00 · 91 阅读 · 0 评论 -
hdu 2151 动态规划入门题(2)
状态方程是 :f(i,j)=f(i-1,j-1)+f(i-1,j+1); 表示第i秒到第j棵树的移动方案总数code:#include <stdio.h>#include "memory.h"int main(int argc, char *argv[]){ int n,p,m,t; while(scanf("%d%d%d%d",&n,&p...原创 2013-11-20 20:29:00 · 70 阅读 · 0 评论 -
hdu 1087(DP经典最大递增子序列)
经典的算法还是要硬记的,注意子续列可以不连续code:#include<stdio.h> #define N 1001 int dp[N]; int value[N]; int n,max; int main() { int i,j; while(scanf("%d",&n)!=EOF&&n){ ...原创 2013-11-20 22:59:00 · 97 阅读 · 0 评论 -
hdu 2602 01背包问题
当前容量的最大价值在放与不放中抉择code:#include <stdio.h> #include "memory.h" int dp[1005][1005]; int max(int a,int b) { if(a>b) { return a; }else { return b; } } int main(int argc, ...原创 2013-11-22 13:04:00 · 68 阅读 · 0 评论 -
凸包相关
定义⒈对于一个集合D,D中任意有限个点的线性组合的全体称为D的凸包。⒉对于一个集合D,所有包含D的凸集之交称为D的凸包。可以证明,上述两种定义是等价的概念1 点集Q的凸包(convex hull)是指一个最小凸多边形,满足Q中的点或者在多边形边上或者在其内。右图中由红色 线段表示的多边形就是点集Q={p0,p1,...p12}的凸包。2 一组平面上的点,求一...原创 2013-11-27 14:03:00 · 529 阅读 · 0 评论 -
hdu 1233
并查集的经典做法,计算把路畅通后的最小花费。先把已经畅通的路用并查集归类,再把没畅通的路按花费从小到大排序后逐渐加入根类中。code:#include <iostream>#include "algorithm"using namespace std;int bin[105];int n;struct point{ int x; in...原创 2013-11-28 12:37:00 · 73 阅读 · 0 评论 -
hdu 1875
保存岛与岛之间的距离,把距离从小到大排序,最后用并查集畅通code:#include <stdio.h>#include "math.h"#include "algorithm"using namespace std;int bin[105];int n; //n个小岛int counta;double result;struct point //...原创 2013-11-28 15:02:00 · 92 阅读 · 0 评论 -
hdu 1272
总的来说要是判断这个迷宫是否成树形,不能有环(当有两个连通的数同时属于一个祖先时即确定有环),只能有一个根(当并集中有两个元素为初始状态时即确实根不唯一),所以当用并查集归并时可以向大的数归并也可以往小的数归并,这一点与求环最优值的畅通路是不同的。最最恶心的是这题当不存在结点时输出yes...code:#include <iostream>#include "cstdi...原创 2013-11-28 21:20:00 · 112 阅读 · 0 评论 -
hdu 1023 卡特兰数经典
code:#include <iostream>using namespace std;int a[105][105];int b[105];void catalan() //求卡特兰数{ int i, j, len, carry, temp; a[1][0] = b[1] = 1; len = 1; for(i = 2; i &...原创 2013-11-29 15:06:00 · 128 阅读 · 0 评论 -
hdu 1007
设计最小的套环半径,令x,y分别从小到大排序,如果前一个X或前一个Y加上当前半径要大于后一个x或y则可以肯定这个半径必能一下子套中两个。所以要计算新的半径。code:#include <stdio.h> #include <string.h> #include <stdlib.h> #include <math.h> #in...原创 2013-11-29 20:42:00 · 86 阅读 · 0 评论 -
hdu 3177 差排
要求当前容量是否能把所有东西都放下,且放一个容量少一点。按差值进行排序。code:#include <iostream>using namespace std;struct thing{ int aroom; int broom;};int cmp(thing a,thing b) { if(a.broom-a.aroom>b.broom-b...原创 2013-11-29 21:43:00 · 91 阅读 · 0 评论 -
hdu 2501
http://acm.hdu.edu.cn/showproblem.php?pid=2501&PHPSESSID=fme1u1rdulrni3r4tbv5t5e186递推分析:#include <iostream>using namespace std;int main(){ int t,n,a[31]; a[0]=0; a[1]=1;...原创 2013-12-01 09:59:00 · 111 阅读 · 0 评论 -
hdu 1722
http://acm.hdu.edu.cn/showproblem.php?pid=1722规律有点意思。。又有点纠结code:#include <iostream>using namespace std;int gcd(int a,int b){ return b==0?a:gcd(b,a%b);}int main(int argc, char *a...原创 2013-12-01 14:33:00 · 70 阅读 · 0 评论 -
取价值最大的动态规划
n,m在n个里取m个.之后n先是分母,再是n个分子code:#include <iostream>#include "memory.h"using namespace std;double dp[105][105];double fenzi[105][105];double fenmu[105][105];double max(double a,doubl...原创 2013-12-01 22:54:00 · 196 阅读 · 0 评论 -
10进制里不要62
10进制里不要62就可以将剩下的数看成八进制code:#include <iostream>#include "stack"using namespace std;int shuz[8]={0,1,3,4,5,7,8,9};int shu8[8]={0,1,2,3,4,5,6,7};int main(int argc, char *argv[]){ in...原创 2013-12-01 22:56:00 · 98 阅读 · 0 评论 -
hdu 2531
http://acm.hdu.edu.cn/showproblem.php?pid=2531依旧广搜,要注意的是防守队员身体可能占到25格...之前没注意到这个WA了几次code:#include <iostream>#include "queue"#include "memory.h"using namespace std;char map[105][1...原创 2013-12-02 09:19:00 · 102 阅读 · 0 评论 -
二维数组的地址传递
二维数组只有地址传递没有值传递,如可由以下几种方法实现矩阵的转置。code:#include <iostream>using namespace std;int rever(int (&a)[3][3]){ int i,j; for(i=0;i<3;i++) { for(j=0;j<i;j++) { int temp; ...原创 2013-12-02 17:10:00 · 2050 阅读 · 0 评论 -
hdu 1856
统计并查集里的最大元素个数http://acm.hdu.edu.cn/showproblem.php?pid=1856code:#include <iostream>using namespace std;int bin[10000001];int summ[10000001];int find(int x){ if(bin[x]!=x) {...原创 2013-12-03 17:40:00 · 71 阅读 · 0 评论 -
hdu 1286
欧拉函数:找出小于或等于n与n互质的数的个数,例如φ(8)=4,因为1,3,5,7均和8互质code:#include <iostream>#include "math.h"using namespace std;typedef long long LL;LL euler(LL n ){ LL i,m = (int)sqrt( n + 0.5 ),an...原创 2013-12-03 20:08:00 · 75 阅读 · 0 评论