算法
Avalonmashiro
这个作者很懒,什么都没留下…
展开
-
循环节及周期
#include#includeint main(){ int n,i,k,m,j,x,t; char s[85]; scanf("%d",&n); for(k=1;kn;k++) { memset(s,'\0',sizeof(s)); scanf("%s",s); m=strlen(s)-1;原创 2015-11-04 00:32:53 · 1017 阅读 · 0 评论 -
最长回文子串
最长回文字符串 回文串就是一个正读和反读都一样的字符串,比如“level”或者“noon”等等就是回文串。回文子串,顾名思义,即字符串中满足回文性质的子串。比如输入字符串 "google”,由于该字符串里最长的对称子字符串是 "goog”,因此输出4。1.问题解决的基本方法分析:可能很多人都写过判断一个字符串是不是对称的函数,这个题目可以看成是该函数的加强版。 要判断一个字转载 2015-11-18 00:29:34 · 321 阅读 · 0 评论 -
周期
#includeint main(){ int a,b,n,i,f[50]={0,1,1}; while(scanf("%d%d%d",&a,&b,&n)!=EOF) { if(a==0&&b==0&&n==0)break; for(i=3;i { f[i]=(a*f[i-1]+b原创 2015-11-02 00:42:42 · 356 阅读 · 0 评论 -
二进制枚举
#include#include#includeint m,n,tiles[15][15],tiles1[15][15],ope[15][15],a[2][5]={{-1,0,1,0,0},{0,-1,0,1,0}},res[15][15];int reversal(int cnt){ int i,j,k; for(i=1;i {原创 2015-12-11 03:22:38 · 324 阅读 · 0 评论 -
八数码
http://www.dakaren.com/blog/post/3.html八数码问题一.八数码问题八数码问题也称为九宫问题。在3×3的棋盘,摆有八个棋子,每个棋子上标有1至8的某一数字,不同棋子上标的数字不相同。棋盘上还有一个空格,与空格相邻的棋子可以移到空格中。要求解决的问题是:给出一个初始状态和一个目标状态,找出一种从初始转变成目标状态的移动棋子步数最少的移动步骤。所谓转载 2015-11-18 17:56:22 · 935 阅读 · 0 评论 -
求最近点问题
问题描述 在应用中,常用诸如点、圆等简单的几何对象代表现实世界中的实体。在涉及这些几何对象的问题中,常需要了解其邻域中其他几何对象的信息。例如,在空中交通控制问题中,若将飞机作为空间中移动的一个点来看待,则具有最大碰撞危险的2架飞机,就是这个空间中最接近的一对点。这类问题是计算几何学中研究的基本问题之一。下面我们着重考虑平面上的最接近点对问题。 最接近点对问题的提法是:转载 2015-11-03 00:31:20 · 513 阅读 · 0 评论 -
二进制枚举
#include#include#includeint m,n,tiles[15][15],tiles1[15][15],ope[15][15],a[2][5]={{-1,0,1,0,0},{0,-1,0,1,0}},res[15][15];int reversal(int cnt){ int i,j,k; for(i=1;i {原创 2015-12-11 03:22:46 · 312 阅读 · 0 评论 -
八数码3
对于给定八数码棋局的初始状态,我们的目标是通过交换空格与其相邻棋子使棋盘达到目标状态。其中,游戏规则是只能交换空格与其上下左右四个方向的相邻棋子。假设棋局目标状态为如下形式:(A、B、C、D、E、F、G、H表示棋子) A B C D E F G H 而初始状态就是A、B、C、D、E、F、G、H这八个棋子在这九个棋格上的任意分布。并且我转载 2015-11-19 00:46:55 · 668 阅读 · 0 评论 -
bfs
#include#include#includeusing namespace std;int k,a[100001];struct list{ int n,t;}next,now;int bfs(int n,int t){ if(n==k) return 0; queue q; now.n=n;原创 2015-11-25 00:02:47 · 283 阅读 · 0 评论 -
同余模定理
出处:優YoU http://user.qzone.qq.com/289065406/blog/1303946967大致题意:给出一个整数n,(1 解题思路:首先暴力枚举肯定是不可能的 1000ms 想不超时都难,而且枚举还要解决大数问题。。要不是人家把这题放到搜索,怎么也想不到用BFS。。。 解题方法: BFS+同余模定理 不说废话。 首先转载 2015-12-27 11:41:10 · 1040 阅读 · 0 评论 -
八数码的八重境界
EightTime Limit:1000MS MemoryLimit: 65536K Special JudgeDescription The 15-puzzle has been aroundfor over 100 years; even if youdon't know it by that name, yo转载 2015-11-16 22:08:19 · 640 阅读 · 0 评论 -
体会优先队列
#include#includeusing namespace std;char position[200][200];int m,n,a[2][4]={{1,0,-1,0},{0,1,0,-1}};struct node{ int x,y,time; friend bool operator { return a.tim原创 2015-11-15 17:32:26 · 258 阅读 · 0 评论 -
hdu2062
#include int main(void){ int i, n, s[21];__int64 m, t; __int64 c[21] = {0}for (i = 1; i 21; i++)c[i] = c[i-1] * (i - 1) + 1;while (scanf("%d%I64d", &n, &m) != EOF)原创 2015-11-04 10:59:16 · 334 阅读 · 0 评论 -
二分图最大匹配 完全匹配 匈牙利算法
二分图的最大匹配、完美匹配和匈牙利算法2013-08-01Algorithms二分图匹配, 图论, 算法这篇文章讲无权二分图(unweighted bipartite graph)的最大匹配(maximum matching)和完美匹配(perfect matching),以及用于求解匹配的匈牙利算法(Hungarian Algorithm);不讲带权二分图的最佳匹配。二分图:转载 2015-11-04 17:10:52 · 445 阅读 · 0 评论 -
最长子序列
动态规划法经常会遇到复杂问题不能简单地分解成几个子问题,而会分解出一系列的子问题。简单地采用把大问题分解成子问题,并综合子问题的解导出大问题的解的方法,问题求解耗时会按问题规模呈幂级数增加。为了节约重复求相同子问题的时间,引入一个数组,不管它们是否对最终解有用,把所有子问题的解存于该数组中,这就是动态规划法所采用的基本方法。【问题】 求两字符序列的最长公共字转载 2015-10-20 17:16:33 · 507 阅读 · 0 评论 -
优化
实际上dp不一定要递推,这种简单的dp实际上是遍历中加入一个判断排除了不必要的情况,优化了复杂度那么我要做的就是找出优化条件减少复杂度,使正常遍历要timelimit的转化为ac#includeint main(){ int T,i,n,a[100000],j,max,k,sum,start,end; scanf("%d",&T); for(i=1;i原创 2015-10-27 13:06:22 · 216 阅读 · 0 评论 -
求1的个数
package BitCount; /** * 任意给定一个32位无符号整数n,求n的二进制表示中1的个数,比如n = 5(0101)时,返回2,n = 15(1111)时,返回4 * * @author vivizhyy * */ public interface BitCountMethods { /** 移位+计数 */ public int n转载 2015-10-27 18:07:13 · 355 阅读 · 0 评论 -
BFS DFS
广度优先搜索(Breadth-First-Search)和深度优先搜索(Deep-First-Search)是搜索策略中最经常用到的两种方法,特别常用于图的搜索.其中有很多的算法都用到了这两种思想,比如:Dijkstra单源最短路径算法和Prim最小生成树算法都采用了和宽度优先搜索类似的思想。BFS的思想:从一个图的某一个顶点V0出发,首先访问和V0相邻的且未被访问过的顶点V1、V2、转载 2015-11-12 13:30:40 · 266 阅读 · 0 评论 -
子序列
最大子序列最大子序列是要找出由数组成的一维数组中和最大的连续子序列。比如{5,-3,4,2}的最大子序列就是{5,-3,4,2},它的和是8,达到最大;而{5,-6,4,2}的最大子序列是{4,2},它的和是6。你已经看出来了,找最大子序列的方法很简单,只要前i项的和还没有小于0那么子序列就一直向后扩展,否则丢弃之前的子序列开始新的子序列,同时我们要记下各个子序列的和,最后找到和最大的子序列。转载 2015-10-26 23:25:21 · 243 阅读 · 0 评论 -
HDU1241多种解
#include#includeint m,n,a[2][10000];char grid[100][100];void bfs(int i,int j){ int k=0,t=0; memset(a,-1,sizeof(a)); a[0][k]=i; a[1][k]=j; while(a[0][t]!=-1) { i=a原创 2015-11-13 15:09:10 · 263 阅读 · 0 评论 -
1026优先队列
#include#includeusing namespace std;int n,m,a[2][4]={{1,0,-1,0},{0,1,0,-1}};struct node{ int i,j,time; friend int operator { return a.time>b.time; }};str原创 2015-11-16 16:43:34 · 292 阅读 · 0 评论 -
UVa699 The Falling Leaves
// UVa699 The Falling Leaves// Rujia Liu// 题意:给一棵二叉树,每个节点都有一个水平位置:左儿子在它左边1个单位,右儿子在右边1个单位。从左向右输出每个水平位置的所有结点的权值之和。按照递归方式输入,-1表示空树// 算法:在“建树”的同时计算,无须真正的把树保存下来#include#includeusing namespace std;转载 2016-03-09 16:09:40 · 229 阅读 · 0 评论