上一页 1 2 3 4 5 6 7 8 9 ··· 17 下一页

2012年7月19日

DFS 专题 Tempter of the Bone

摘要: 这道题的剪枝:奇偶性,曼哈顿距离类型的。不剪会超时。# include <cstdio># include <cstring>using namespace std;# define N 7 + 3# define ABS(x) (((x)>0)?(x):(-(x)))int si, sj, gi, gj;int n, m, T;char g[N][N];bool vis[N][N];bool finished;const int dir[][2] = {{0,1}, {1,0}, {0,-1}, {-1,0}};void dfs(int x, int y, in 阅读全文

posted @ 2012-07-19 17:32 getgoing 阅读(151) 评论(0) 推荐(0) 编辑

DFS 专题 Accepted Necklace

摘要: 这道题如果用 DFS 必须剪枝:剪掉重复的组合。DFS 枚举了所有的排列,实际上这道题只需要组合。View Code # include <cstdio># include <cstring># define N 20 + 5int ans;int n, k, vMax, v[N], w[N];bool vis[N];void dfs(int cur, int sum, int cnt, int weight){ if (weight > vMax) return ; if (cnt == k) ans = (sum > ans ? sum : ans); 阅读全文

posted @ 2012-07-19 17:02 getgoing 阅读(167) 评论(0) 推荐(0) 编辑

DFS 专题 Beat

摘要: HINT 误导人,水题。View Code # include <cstdio># include <cstring># define N 15 + 5int n, ans;int f[N][N];bool vis[N];void dfs(int cur, int cnt, int t){ if (cnt > ans) ans = cnt; for (int i = 0; i < n; ++i) if (vis[i] == false && f[cur][i] >= t) { vis[i] = true; dfs(i, cnt+1, f 阅读全文

posted @ 2012-07-19 16:36 getgoing 阅读(147) 评论(0) 推荐(0) 编辑

DFS 专题 N皇后

摘要: DFS 其实会超时的,打表。# include <cstdio># include <cstring># define N 10 + 5int n, ans;int solu[N];bool vis[N];void dfs(int cnt){ if (cnt == n) { ++ans; return ; } bool ok; for (int i = 1; i <= n; ++i) if (vis[i] == false) { ok = true; for (int j = 1; j <= cnt; ... 阅读全文

posted @ 2012-07-19 16:06 getgoing 阅读(207) 评论(0) 推荐(0) 编辑

DFS 专题 哈密顿绕行世界问题

摘要: 注意:标号后面是两个空格。# include <cstdio># include <cstring># include <algorithm>using namespace std;int n, m, adj[21][3];bool vis[21];int solu[22];void dfs(int cur, int cnt){ int t; for (int i = 0; i < 3; ++i) { t = adj[cur][i]; if (cnt == 20 && t == m) { printf("%d: ... 阅读全文

posted @ 2012-07-19 15:35 getgoing 阅读(415) 评论(0) 推荐(0) 编辑

DFS专题 下沙小面的(2)

摘要: 这道题目有问题,4WA :注意:对于每组测试,Lele都是在站点0拉上乘客的。最后看了题解,改了初始状态 AC 的。View Code # include <cstdio># include <cstdlib># include <cstring># define N 30 + 5int n, k;int g[N][N], des[N], min;bool vis[N];int cmp(const void *x, const void *y){ return *(int*)x - *(int*)y;}void dfs(int cnt, int u, int 阅读全文

posted @ 2012-07-19 00:16 getgoing 阅读(200) 评论(0) 推荐(0) 编辑

2012年7月18日

DFS专题 Zipper

摘要: 这道题放在 DFS 里不太合适,我刚开始就想到了 DP 却没写,DFS 超时后看了题解才发现就是记忆化搜索(白书认为记忆化就是DP);1TLE 2WA,把 lens 写成了 lent 后来才发现的。View Code # include <cstdio># include <cstring># define N 200 + 10bool finished, f[N][N];int lens, lent;char s[N], t[N], g[2 * N];void dfs(int p, int q, int cnt){ if (finished) return; if ( 阅读全文

posted @ 2012-07-18 23:19 getgoing 阅读(313) 评论(0) 推荐(0) 编辑

DFS专题 Sum It Up

摘要: 不含回溯,看了标程后 AC 的,标程的代码很短,处理相同解的方法比较好。View Code # include <cstdio># define N 12 + 5bool find;int t, n, a[N], solu[N];void dfs(int sum, int p, int cnt){ if (sum > t) return ; if (sum == t) { find = true; printf("%d", solu[0]); for (int i = 1; i < cnt; ++i) print... 阅读全文

posted @ 2012-07-18 21:09 getgoing 阅读(229) 评论(0) 推荐(0) 编辑

DFS专题 变形课

摘要: 有向图的DFS,不能包含回溯,会爆栈的。View Code # include <cstdio># include <cstring># define N 26bool finished, vis[N];char g[N][N];void dfs(int u){ for (int i = 0; i < N; ++i) { if (u != i && g[u][i]) { if (vis[i]) return; if (i == 'm'-'a') {finished = true; return ;} ... 阅读全文

posted @ 2012-07-18 19:53 getgoing 阅读(233) 评论(0) 推荐(0) 编辑

模拟 Robot Motion [HDOJ]

摘要: View Code # include <cstdio># include <cstring># define N 10 + 5int r, c, s, d[N][N];char grid[N][N];void init(void){ scanf("%d", &s); for (int i = 1; i <= r; ++i) { scanf("%s", grid[i]+1); memset(d[i]+1, 0, sizeof(d[i][0])*c); }}void solve(void){ int x, y, t; 阅读全文

posted @ 2012-07-18 19:03 getgoing 阅读(188) 评论(0) 推荐(0) 编辑

DFS专题 Prime Ring Problem

摘要: View Code # include <cstdio># include <cstring># define N 20 + 5char ptab[25] = {0, 0, 1, 1, 0, 1, 0, 1, 0, 0, 0, 1, 0, 1, 0, 0, 0, 1, 0, 1, 0, 0, 0, 1, 0};int n, solu[N];bool vis[N];void dfs(int cnt){ if (cnt... 阅读全文

posted @ 2012-07-18 18:40 getgoing 阅读(193) 评论(0) 推荐(0) 编辑

ZOJ 1008 Gnome Tetravex

摘要: DFS 题目,剪枝比较重要,这里使用的是把重复的方块只记录一次,用 num[] 保存它的数目。# include <cstdio># include <cstring># define N 25 + 2bool finished;int n, m, t[N][4], num[N], ans[N];void dfs(int cnt){ if (cnt == n*n) {finished = true; return ;} int x = cnt/n + 1, y = cnt%n + 1; int left = cnt, top = cnt+1-n; for (int i 阅读全文

posted @ 2012-07-18 16:57 getgoing 阅读(277) 评论(0) 推荐(0) 编辑

2012年7月17日

USACO section1.2 Transformations

摘要: 模拟题,给出一个 n×n 的字符块的两个状态(分别为初始态和目标态)和几种操作,问目标态最少是由初始态的哪个操作完成的,WA 3 次。/*PROG: transformLANG: C++*/# include <cstdio># include <cstring># define N 10 + 5void print(char s[][N], int n){ for (int i = 0; i < n; ++i) puts(s[i]);}/* rotate 90 degrees clockwise */void rotate(char s[][N], i 阅读全文

posted @ 2012-07-17 21:37 getgoing 阅读(156) 评论(0) 推荐(0) 编辑

USACO section1.2 Name That Number

摘要: 直接暴力也可,用的二分搜索+枚举,文件输入的调试了很久,后来不知道怎么就对了。二分的是写成求最小符合条件的下标;/*PROG: namenumLANG: C++*/# include <cstdio># include <cstring># include <cstdlib># define N 5000 + 10# define LEN 20int len[N];char s[N][LEN];char tab[30];void build(void){ for (int i = 'A'; i < 'S'; ++i) t 阅读全文

posted @ 2012-07-17 20:30 getgoing 阅读(184) 评论(0) 推荐(0) 编辑

USACO section1.2 Dual Palindromes

摘要: 给出 n 和 s (十进制),打印 s 后面 n 个在 2-10 进制中至少两个进制下为回文数的十进制表示。/*PROG: dualpalLANG: C++*/# include <cstdio># include <cstring>int n, s;void strRev(char *s){ char ch; int len = strlen(s), mid = len / 2; for (int i = 0; i < mid; ++i) ch = s[i], s[i] = s[len-1-i], s[len-1-i] = ch;}void to(int ba. 阅读全文

posted @ 2012-07-17 17:38 getgoing 阅读(174) 评论(0) 推荐(0) 编辑

USACO section1.2 Palindromic Squares

摘要: 给出一个数 n(十进制),求出 1-300 范围内所有平方(n 进制)为回文串的数,并打印。/*PROG: palsquareLANG: C++*/# include <cstdio># include <cstring># define N 300void strRev(char *s){ char ch; int len = strlen(s), mid = len / 2; for (int i = 0; i < mid; ++i) ch = s[i], s[i] = s[len-1-i], s[len-1-i] = ch;}void to(int bas. 阅读全文

posted @ 2012-07-17 17:18 getgoing 阅读(222) 评论(0) 推荐(0) 编辑

USACP section1.2 Milking Cows

摘要: 把所有区间(如果能)合并起来,求最长连续区间长度和最长间隔长度(两个区间之间,如果只有一个区间为0);/*PROG: milk2LANG: C++*/# include <cstdio># include <cstdlib># define N 5000 + 10struct val{ int s, t;} a[N];int n;int cmp(const void *x, const void *y){ val *p = (val*)x; val *q = (val*)y; if (p->s == q->s) return p->t - q-> 阅读全文

posted @ 2012-07-17 01:27 getgoing 阅读(219) 评论(0) 推荐(0) 编辑

USACO section1.1 Broken Necklace

摘要: 这道题理解了题目的含义就很简单了;如果题目改成每次只统计一端,遇到不同时开始统计另一端,并且只有相邻两次统计的(可以转化)为同一种颜色时,才能累加,难度会很高,可能要DP了;/*PROG: beadsLANG: C++*/# include <cstdio># include <cstring># define N 350 + 10int n;char s[N];int count(char *s, int k){ int ret = 0; int i = k; int j = (k-1+n) % n; char cur; while(ret < n && 阅读全文

posted @ 2012-07-17 00:34 getgoing 阅读(241) 评论(0) 推荐(0) 编辑

2012年7月16日

USACO section 1.1 Friday the Thirteenth

摘要: 这道题挺不好写的,题目是说给出一个年份范围,统计这个范围内星期一到星期日为 13 号的个数。/*PROG: fridayLANG: C++*/# include <cstdio>const char daytab[2][13] = { {0, 31, 28, 31, 30, 31, 30, 31, 31, 30, 31, 30, 31}, {0, 31, 29, 31, 30, 31, 30, 31, 31, 30, 31, 30, 31}};int isLeap(int year){ return year%4 == 0 && year%100 != 0 || y 阅读全文

posted @ 2012-07-16 20:12 getgoing 阅读(158) 评论(0) 推荐(0) 编辑

2012年7月13日

187A Permutations

摘要: 这道题和“扑克牌排序”很相似,但是并不是排成升序,可以用同一种方式对两个序列排序,使第二个为升序,此时第一个序列就成了“扑克牌排序”的情况,只需要统计出第一次逆序出现的位置即可,由于是排列,可以用 O(n) 的方法来做;# include <cstdio># define N 200010int n, a[N], b[N];int p[N];void init(void){ scanf("%d", &n); for (int i = 1; i <= n; ++i) scanf("%d", &a[i]); for (int 阅读全文

posted @ 2012-07-13 23:51 getgoing 阅读(206) 评论(0) 推荐(0) 编辑

上一页 1 2 3 4 5 6 7 8 9 ··· 17 下一页

导航