搜索
文章平均质量分 56
South__wind
ACMER
展开
-
poj 1088 滑雪
dp+记忆化搜索,dp[i][j]表示以i,j这个位置为起点能够划过的最大高度。#include#includeint dir_x[4]={1,-1,0,0};int dir_y[4]={0,0,1,-1};int map[110][110],dp[110][110];int m,n,ans;int max(int a,int b){ if(a>原创 2012-08-29 15:31:34 · 228 阅读 · 0 评论 -
poj 1111 Image Perimeters
题意:给你一个起点的坐标x,y,要求你从这个坐标向相邻八个方向开始扩展,并且对应坐标的值为'X'才能继续扩展。求最后扩展得到的图形的周长。可以用dfs,其实就是算总周长去掉两个为x的格子的从边,每搜到一个为x的点就加4,并标记,从这个点往周围扩展,如果是向上下左右扩展就需要-1,因为这表示两个为x的格子有从边,如果在斜上方或斜下方就肯定不会有从边,所以不用减。#incl原创 2012-10-07 16:50:30 · 871 阅读 · 0 评论 -
hdu 4158 GO
统计被白棋包围的格子数与被黑棋包围的格子数:dfs()#include#includeusing namespace std;int fin,n,b,w,r,c,flag,sum;int map[20][20];int vis[20][20];int dirx[4]={0,1,0,-1};int diry[4]={1,0,-1,0};void dfs(i原创 2012-09-02 01:54:32 · 508 阅读 · 0 评论 -
hdu 1429 胜利大逃亡(续)
广搜+位运算:在这里我们建立一个2进制钥匙串,如果对应位有钥匙则该位为1,反之为0,每当遇见钥匙,我们就把这把这把钥匙加到钥匙串的对应位置,广搜压栈的时候需要判断该位置是否为门的位置,并且检查是否有相应的钥匙,并且每个点对应一个钥匙串的状态,建立三维数组,前两位表示保存点的位置,后一位表示相应位置对应的钥匙的状态,进行一遍bfs即可。#includeint m,n,t;原创 2012-09-02 01:08:48 · 720 阅读 · 0 评论 -
hdu 1026 Ignatius and the Princess I
经典的bfs#include#includeint n,m;int prison[200][200];char map[200][200];int visited[200][200];struct point{ int x,y,t; point* pre;}queue[20000];int dx[4]={0,0,-1,1};int dy[原创 2012-08-31 01:08:49 · 341 阅读 · 0 评论 -
hdu 1016 Prime Ring Problem
#includeusing namespace std;bool isprime(int);void backtrack(int);bool check(int);int n;int tu[21];int main(){ int count=0; while(cin>>n) { count++; tu[1]=1; co原创 2012-08-31 01:03:27 · 321 阅读 · 0 评论 -
poj 1129 Channel Allocation
dfs+四色定理#include#include#includeusing namespace std;char str[26];int used[26];int a[26][26];int n;bool bj;bool dfs(int id,int color){ bool flag; for(int i=1;i<=原创 2012-08-30 15:15:20 · 302 阅读 · 0 评论 -
hdu 1078 FatMouse and Cheese
DP+记忆化搜索 dp[i][j]表示以map[i][j]为起点路径搜索得到的的和的最大值。所以最后的结果自然为dp[0][0]了。#includeusing namespace std;int map[100][100],dp[100][100];int dirx[4]={1,-1,0,0};int diry[4]={0,0,-1,1};int n,k;i原创 2012-08-31 01:32:34 · 278 阅读 · 0 评论 -
hdu 1010 Tempter of the Bone
dfs+剪枝#include#includeusing namespace std;int bj[10][10]={0};char mg[10][10];int t,p,t1,t2;int e_x,e_y,k_x,k_y;int m,n;void dfs(int x,int y,int t1){ if(x==e_x&&y==e_y&&t1==t原创 2012-08-30 16:38:36 · 265 阅读 · 0 评论 -
poj 2243 Knight Moves
#include#include#include#includeusing namespace std;int xx[]={1,1,2,2,-1,-1,-2,-2};int yy[]={2,-2,1,-1,2,-2,1,-1};int map[8][8];char a[13],b[13];void dfs(int x,int y,int step){原创 2012-08-30 15:09:38 · 241 阅读 · 0 评论 -
poj 2488 A Knight's Journey
http://poj.org/problem?id=2488#include#includeint dir_x[8]={-2,-2,-1,-1,1,1,2,2};int dir_y[8]={-1,1,-2,2,-2,2,-1,1};struct f{int x;int y;}path[100];int vis[30][30];int m,n,t,原创 2012-08-29 16:17:45 · 556 阅读 · 0 评论 -
poj 2362 Square
dfs#include#include#include#includeusing namespace std;int t,n,len,sum;int stick[30],vis[30];bool cmp(int a,int b) { return a>b;}int dfs(int i,int rest,int trest){ if(trest原创 2012-08-29 15:48:14 · 294 阅读 · 0 评论 -
poj 1154 LETTERS
http://poj.org/problem?id=1154#include#includeint dir_x[4]={1,-1,0,0};int dir_y[4]={0,0,-1,1};int map[25][25],vis1[25][25];int vis2[30];int m,n,ans;void dfs(int x,int y,int step)原创 2012-08-29 16:14:11 · 354 阅读 · 0 评论 -
poj 1564 Sum It Up
http://poj.org/problem?id=1564给你一些数,要求你输出用这些数构成的子集的和等于一个指定的数,用深搜。#include#includeint a[15],vis[15];int t,n,flag;void dfs(int i,int sum){ if(sum==t) { int f; flag=1;原创 2012-08-29 16:07:41 · 306 阅读 · 0 评论 -
poj 1321 棋盘问题
http://poj.org/problem?id=13218皇后的变形#include#include#includeusing namespace std;char map[10][10];int vis[10][10];int n,k,ans;void dfs(int num,int i){ if(num==k) {ans++; r原创 2012-08-29 16:00:06 · 340 阅读 · 0 评论 -
poj 2034 Anti-prime Sequences
题意要求给定一个范围,然后指定一个区间d,使(2到d)的任意区间之和为合数即可。深搜枚举#include#include#includeusing namespace std;int use[1001],prime[10001],vis[1001];int n,m,d,flag;bool dfs(int d,int th){ if(th==原创 2012-08-29 15:56:52 · 280 阅读 · 0 评论 -
poj 2386 Lake Counting
dfs 水题,给定的矩阵水池的分布,相邻8的方向的水池合并在一起看做一个水池,求一共有多少个水池。#include#include#includeusing namespace std;char map[110][110];int vis[110][110];int m,n,sum;int dirx[8]={0,0,1,-1,1,-1,1,-1};int diry[原创 2012-10-07 20:49:30 · 432 阅读 · 0 评论