上一页 1 ··· 8 9 10 11 12 13 14 15 16 ··· 57 下一页

2011年8月22日

DFS之二

摘要: //sicily 1002. Anti-prime Sequences#include<iostream> //DFS,给出n,m,d,元素的取值从n到m,判断是否存在一个排列,使得在序列中任意(2,3,...d)个数的和都不是素数,如果有则输出最小的那个序列#include<stdio.h>#include<cstring>using namespace std;int n,m,d,arr[1010];bool prime(int s){ for(int i=2;i*i<=s;++i) if(s%i==0) return false; ... 阅读全文

posted @ 2011-08-22 12:08 sysu_mjc 阅读(108) 评论(0) 推荐(0) 编辑

DFS之三

摘要: //sicily 1039 Phone Home#include<iostream> //求图的色数,即使各相邻顶点的颜色不相同所需的最小色数.数据量小,直接枚举+DFS#include<stdio.h>#include<cmath>#include<cstring>using namespace std;struct node{ double x,y;}point[20];int n,cnt[20][20],color[20],num,suc;void dfs(int i){ for(int c=1;c<=num;++c) { int f 阅读全文

posted @ 2011-08-22 12:08 sysu_mjc 阅读(138) 评论(0) 推荐(0) 编辑

BFS之五(双向bfs)

摘要: #include <iostream> //poj 2243 Knight Moves 参照poj 1915#include <deque>using namespace std;int dir[2][8]={{-2,-1,1,2,2,1,-1,-2},{-1,-2,-2,-1,1,2,2,1}};int visited[10][20],path[10][20];struct node{ int x,y,c; bool operator==(const node& other) { return x==other.x&&y==other.... 阅读全文

posted @ 2011-08-22 12:07 sysu_mjc 阅读(173) 评论(0) 推荐(0) 编辑

DFS之一

摘要: //poj 1426 Find The Multiple #include<iostream> //求1个10进制数,只能由1或0组成,能整除nusing namespace std;int n,flag;int num[200]={1};int mod(int len){ int s=0; for(int i=0;i<=len;++i) { s=s*10+num[i]; if(s>=n) s%=n; } return s;}void dfs(int len){ if(len>99) ... 阅读全文

posted @ 2011-08-22 12:07 sysu_mjc 阅读(137) 评论(0) 推荐(0) 编辑

BFS之四(双向bfs和康托压缩)

摘要: /*双向BFS就是从起点 和 终点 同时开始搜索。由起点搜索(BSF1)得到的点标记为1,由终点搜索(BFS2)得到的点标记为2。当某一时刻BFS1搜索到了已经标记为2的点(或BFS2搜到了1号点),说明发生相遇,那么答案就是由bfs1和bfs2分别求得的两段路径长度的和。简单的分析:设每次的BFS,总的搜索状态数是r^L(r是搜索的分支数,L是搜索层数)。而采取双向BFS算法,那么,从前往后、从后往前,分别需要搜索L/2层,合起来就是2*(r^(L/2))这要比一般的BFS快的多。可以看到,双向BFS不过就是在while循环中套了两个节点扩展模块,一个是qu1,一个是qu2二者轮流执行、轮流 阅读全文

posted @ 2011-08-22 12:05 sysu_mjc 阅读(462) 评论(0) 推荐(0) 编辑

BFS之三(单向bfs和康托压缩)

摘要: //poj 1077 Eight#include <iostream> //单向bfs和康托压缩#include<string>using namespace std;bool visited[1000000];int fac[]={1,1,2,6,24,120,720,5040,40320,362880}; //9!表int cantor(int arr[]) { int temp,num=1; //当排列为1 2 3 4 5 6 7 8 9时康托值等于1 for(int i=0;i<9;++i) { t... 阅读全文

posted @ 2011-08-22 12:01 sysu_mjc 阅读(185) 评论(0) 推荐(0) 编辑

BFS之一

摘要: //poj 1166 The Clocks#include<iostream> //BFS 51808K 516MS #include<string>using namespace std;string str[10]={" ","ABDE","ABC","BCEF","ADG","BDEFH","CFI","DEGH","GHI","EFHI"};// A 对应 stat 阅读全文

posted @ 2011-08-22 11:58 sysu_mjc 阅读(136) 评论(0) 推荐(0) 编辑

BFS之二

摘要: //poj 1252 Euro Efficiency//给出6枚不同面值(在1到100之间)的硬币,通过 加减 凑出1到100的钱数,我们关心的是最少要用到几枚硬币,//最后求出平均值,并找出其中最大值#include<iostream> //BFS最短路搜索#include<stdio.h>#include<algorithm>#include<queue>#include<cstring>using namespace std;int euro[20],f[200],vis[200];int main(){ int cases; 阅读全文

posted @ 2011-08-22 11:58 sysu_mjc 阅读(150) 评论(0) 推荐(0) 编辑

AC自动机

摘要: #include <iostream> //poj 1204 Word Puzzlesusing namespace std ;struct Node { Node *next[26]; Node *fail; int des; //标记要查找的单词最后一个字母出现的地方 Node():des(-1),fail(NULL) { memset(next,NULL,sizeof(next)); } int heigh;}*root,*q[100000];char table[1... 阅读全文

posted @ 2011-08-22 11:57 sysu_mjc 阅读(163) 评论(0) 推荐(0) 编辑

0-1背包之四

摘要: //sicily 1221. 数字游戏//m个回合里,每个回合在n个数中选择一个ai,然后剩下的数都减去bi,求选中的ai之和的最大值//0-1背包,每个数的体积都为1,背包容量为 m //显然,如果选中的m个数已固定的话,擦去这m个数的顺序对结果有影响,很明显为最大化,应该先擦掉bi小的数,//所以事先要排好序,按bi从大到小排,靠后dp选中的数bi较小#include<iostream> //0-1背包#include<algorithm>using namespace std;struct node{ int a,b;}ans[202];bool cmp(co.. 阅读全文

posted @ 2011-08-22 11:44 sysu_mjc 阅读(124) 评论(0) 推荐(0) 编辑

上一页 1 ··· 8 9 10 11 12 13 14 15 16 ··· 57 下一页

导航