自定义博客皮肤VIP专享

*博客头图:

格式为PNG、JPG,宽度*高度大于1920*100像素,不超过2MB,主视觉建议放在右侧,请参照线上博客头图

请上传大于1920*100像素的图片!

博客底图:

图片格式为PNG、JPG,不超过1MB,可上下左右平铺至整个背景

栏目图:

图片格式为PNG、JPG,图片宽度*高度为300*38像素,不超过0.5MB

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

-+

Bingo

  人生要学会沉淀,沉淀经验,沉淀心情,沉淀自己。

  • 博客(91)
  • 资源 (8)
  • 收藏
  • 关注

原创 【索引】Backtracking - Hard

AOAPC I: Beginning Algorithm Contests (Rujia Liu)                Volume 3. Brute Force::Backtracking - Hard10123 - No Tipping10160 - Servicing Stations197 - Cube185 - Roman Numerals307 - S

2014-08-30 19:04:05 1544

原创 UVA 565 - Pizza Anyone?

#include #include int main() { char str[50]; while (scanf("%s", str) != EOF) { int n, status, num, person[100][2] = {0}, Max = (1 << 16) - 1; for (n = 0; str[0] != '.'; n++) { for (int i =

2014-08-30 17:32:34 1875

原创 UVA 529 - Addition Chains

题目大意:给一个数字n, 然后输出一个元素个数最少的从1到n的序列(可能有多种方案,输出其中一种即可)。其中对于第k个数Ak, 它的值等于Ai+Aj( ) 。解题思路:迭代深搜的方法,先确定数的基数,就是说组成这个数最少需要几个数,例如1个数最大组成1, 2个数最大组成2, 而3个数最大为4(每增加一个数,最大值 * 2)一个很重要的剪枝,当当前第i个数,为k, k的在剩余

2014-08-30 09:00:25 1643

原创 FZU - 2064 找位置

#include int main() { int t; scanf("%d", &t); while (t--) { int arr[105][105] = {0}, n, m, w; scanf("%d%d%d", &n, &m, &w); for (int i = 0; i < n; i++) for (int j = 0; j < m; j++) sca

2014-08-29 19:05:21 1501

原创 HDU - 1175 连连看

#include int main() { int t; scanf("%d", &t); while (t--) { int arr[105][105] = {0}, n, m, w; scanf("%d%d%d", &n, &m, &w); for (int i = 0; i < n; i++) for (int j = 0; j < m; j++) sca

2014-08-29 18:55:28 1543

转载 搜索的不稳定性

没有这个,生活会更有趣   当你试图写很强或很完美的程序时,搜索的不稳定性就可能出现。有很多原因可以导致不稳定性,当我讨论搜索的诸多改进方法时,顺便讨论了它们是如何导致搜索不稳定的。其他我没有讨论的搜索技巧也必须考虑不稳定的可能。  不稳定的搜索会返回无效的值,你用(5, 25)的Alpha-Beta窗口会高出边界,因此你用(24, INFINITY)重新搜索,却低出边界。这不应该发生,因为高出边

2014-08-29 12:25:04 1714

转载 主要变例搜索

主要变例搜索dgf对Alpha-Beta的改进   主要变例搜索(PVS, Principal Variation Search)是提高“Alpha-Beta”算法效率的一种方法。  在Alpha-Beta搜索中,任何结点都属于以下三种类型:  1. Alpha结点。每个搜索都会得到一个小于或等于Alpha的值,这就意味着这里没有一个着法是好的,可能是因为这个局面对于要走的

2014-08-29 12:21:33 2799

转载 期望窗口

期望窗口是对迭代加深的改进。迭代加深的最简单的实现方法是这样的: for (depth = 1; ; depth ++) { val = AlphaBeta(depth, -INFINITY, INFINITY); if (TimedOut()) {  break; }}   这里调用了一个“窗口”为正负无穷大的Alpha-Beta搜索,以假定返回值可能是很大的正数或负数。  假设下一次迭代时,搜

2014-08-29 12:18:49 1720

转载 空着裁剪

空着向前裁剪没有副作用即可获得额外的速度   空着向前裁剪(Null-Move Forward Pruning),运用可能忽视重要路线的冒险策略,使得国际象棋的分枝因子锐减,它导致搜索深度的显著提高,因为大多数情况下它明显降低了搜索的数量。它的工作原理是裁剪大量无用着法而只保留好的。  这个技术在很多刊物上报道过,但是使得大家都来关注空着的,则是由Chrilly Donniger发

2014-08-29 12:12:11 2700

转载 静态搜索

静态搜索  国际象棋中会有很多强制的应对。如果有人用马吃掉你的象,那么你最好吃还他的马。  Alpha-Beta搜索不是特别针对这种情况的。你把深度参数传递给函数,当深度到达零就做完了,即使一方的后被捉。  一个应对的方法称为“静态搜索”(Quiescent Search)。当Alpha-Beta用尽深度后,通过调用静态搜索来代替调用“Evaluate()”。这个函数也对局

2014-08-29 12:07:09 1896

转载 简介(二)

尽管我们已经讨论过Alpha-Beta搜索简单有效,还是有很多方法试图更有效地对博弈树进行搜索。它们中的大部分思想就是,如果认为介于Alpha和Beta间的评价是感兴趣的,而其他评价都是不感兴趣的,那么对不感兴趣的评价作截断会让Alpha-Beta更有效。如果我们把Alpha和Beta的间距缩小,那么感兴趣的评价会更少,截断会更多。  首先让我们回顾一下原始的Alpha-Beta搜索,忽略

2014-08-29 11:58:13 1703

转载 简介(一)

什么样的结点需要搜索?全部还是选择性的?

2014-08-29 11:24:41 1992

转载 置换表

一个多功能的数据结构   国际象棋的搜索树可以用图来表示,而置换结点可以引向以前搜索过的子树上。置换表可以用来检测这种情况,从而避免重复劳动。如果“1. e4 d6 2. d4”以后的局面已经搜索过了,那就没有必要再搜索“1. d4 d6 2. e4”以后的局面了。  这个原因可能鼓舞着早期的电脑国际象棋程序的设计师们,而现在事实上这还是置换表的次要用途。在某些局面,例如在没有通路兵的王兵残局中,

2014-08-29 10:04:39 3967 1

转载 简介(三)

我还没有讲完Alpha-Beta呢,因为我的伪代码里包含神秘的“排序着法”还没有解释,暂时先扔在一边,在讲完散列技术后,我将继续这部分内容。  散列技术的思想非常简单,很多棋类会出现“置换”的着法,即着法顺序的不同会导致相同的局面。例如在国际象棋中,开局走“1. d4 Nf6 2. c4”和“1. c4 Nf6 2. d4”都会导致一样的局面(称为印度防御),白方两次进兵可以按不同的顺序走。再看一

2014-08-29 10:02:13 1670

转载 简介(二)

浅的裁剪   假设你用最小-最大搜索(前面讲到的)来搜索下面的树:    你搜索到F,发现子结点的评价分别是11、12、7和9,在这层是棋手甲走,我们希望他选择最好的值,即12。所以,F的最小-最大值是12。  现在你开始搜索G,并且第一个子结点就返回15。一旦如此,你就知道G的值至少是15,可能更高(如果另一个子结点比G更好)。这就意味着我们不指望棋手乙走G这步了,因为就

2014-08-29 09:59:39 1646

转载 简介(一)

搜索树   任何棋类游戏都要定义一棵有根的树(即“博弈树”),一个结点就代表棋类的一个局面,子结点就是这个局面走一步可以到达的一个局面。例如下图是井子棋(Tic-tac-toe)的搜索树:      (实际上,这个搜索树的根结点应该有9个子结点,但是我去掉了一些对称的情况。如果同样的棋盘是由两个不同的着法顺序形成的,那么我们就建立两个结点,所以这的确是树的结

2014-08-29 09:55:10 1758

转载 最小-最大搜索

从浅显的地方开始   在国际象棋里,双方棋手都知道每个棋子在哪里,他们轮流走并且可以走任何合理的着法。下棋的目的就是将死对方,或者避免被将死,或者有时争取和棋是最好的选择。  国际象棋程序通过使用“搜索”函数来寻找着法。搜索函数获得棋局信息,然后寻找对于程序一方来说最好的着法。  一个浅显的搜索函数用“树状搜索”(Tree-Searching)来实现。一个国际象棋棋局通常可以看作一

2014-08-29 09:51:05 2459 1

转载 Alpha-Beta搜索

《对弈程序基本技术》专题 Alpha-Beta搜索 Bruce Moreland / 文 最小-最大的问题   Alpha-Beta 同“最小-最大”非常相似,事实上只多了一条额外的语句。最小最大运行时要检查整个博弈树,然后尽可能选择最好的线路。这是非常好理解的,但效率非常低。每次搜索更深一层时,树的大小就呈指数式增长。  通常一个国际象棋局面都有35个左右的合

2014-08-29 09:43:50 1714

转载 迭代加深

迭代加深   一个听起来不怎样的思想   如果你准备开始搜索一个国际象棋的局面了,你要搜索多深呢?事先预测搜索将进行多少时间,这有些困难,因为完成D层搜索所需要的时间取决于很多不确定的因素。在复杂的中局局面里,你可能不会搜索得很深,而在残局中你可能会搜索得非常深,在某些王兵残局里你可能会搜索100多层【译注:这也太夸张了点吧】。  有一个思想,就是一开始只搜索一层,如果搜索

2014-08-29 09:41:28 2387

原创 UVA - 519 Puzzle (II)

#include #include #include char pi[36][5], data[6][6][5];int num, vis[40], row, col;int cmp(const void*a, const void*b) { return strcmp((char*)a, (char*)b);}bool judge(int x, int y, int i)

2014-08-26 20:18:51 1578

原创 UVA 387 - A Puzzling Problem

#include int vis[4][4] = {0}, t = 0, n;struct Piece { int row; int column; char data[5][5];} pie[20];bool DFS(int cur) { if (cur == n) return true; for (int i = 0; i <= 4 - pie[cur].row

2014-08-25 16:25:29 1639

原创 UVA 307 - Sticks

#include #include #include using namespace std;int n, top, sum, Max, vis[105], part[105];int cmp(int a, int b) { return a > b;}bool DFS(int pos, int cnt, int lenth) { if (cnt == top) ret

2014-08-24 17:31:34 1637

原创 UVA 185 - Roman Numerals

#include #include int yes, len, count, change[200], vis[10] = {0};char str[100], letter[8] = {"IVXLCDM"}, record[8];bool judge() { int rec[200] = {0}, num[3] = {0}, cnt = 0; for (int i = 0; i

2014-08-24 00:27:58 1652

原创 UVA 10160 - Servicing Stations

#include #define ll long longlong long st[40], later[40];int num, n, m;bool DFS(long long build, int step, int cur) { if (build == ((ll)1 << n) -1) return true; if (step == num) return fal

2014-08-23 10:20:07 1688

原创 UVA 10123 - No Tipping

#include #include #include #include int cnt[3], cur[3];double wl1, wr1, wl2, wr2;struct Block { int pos; int w;} block[3][30], record[30], x;int cmp(const void *c, const void *d) { Bloc

2014-08-22 14:08:39 1569

转载 C style字符串

C style string(C风格字符串)的定义如下:C程序把指向以空字符结束的字符数组的指针视为字符串。在C++中,字符串字面值就是C风格字符串。C标准库定义一系列处理这种字符串的库函数,C++中将这些标准库函数放在cstring头文件中。由于C风格字符串本质上容易出错,C++程序应该优先使用C++标准库类string而少使用C风格字符串。C++标准库类string比C风格字符串更安全,效

2014-08-19 15:11:49 2699

转载 C++标准库string类型

string类型支持长度可变的字符串,C++标准库将负责管理与存储与字符串相关的类容,以及提供各种有用的操作。标准库string类型的目的就是满足对字符串的一般应用。包含头文件

2014-08-19 14:57:53 1650

转载 C++栈和队列

使用标准库的栈和队列时,先包含相关的头文件#include#include定义栈如下:stack stk;定义队列如下:queue q;栈提供了如下的操作

2014-08-19 14:43:54 3008

转载 图---邻接矩阵(建立,深度遍历,广度遍历)

图的存储方式可以用邻接矩阵来表示,我们假定顶点序号从0开始,即图G的顶点集的一般形式是V(G)={v0,vi,…,Vn-1}。以下代码测试过,为图的邻接矩阵表示方式。

2014-08-19 14:22:19 1778

原创 UVA 120 - Stacks of Flapjacks

题目大意:一摞盘子,从上到下。个数N:1~30,盘子直径D,1~100,求:每次只能执行从顶部到某一个的反转,也就是像堆栈一样,先倒出来,再倒回去,最终实现,从顶到底有序(升序)。输出每次反转的位置(即每次反转的底层位置),编号从底到顶从1~N。(没要求最优,能够实现就可以)。解题思路:模拟。

2014-08-19 11:01:54 1535

原创 UVA 10305 - Ordering Tasks

#include int main() { int n, m; while (scanf("%d%d", &n, &m), n) { int edge[105][105] = {0}, indegree[105] = {0}; for (int i = 0; i < m; i++) { int a, b; scanf("%d%d", &a, &b); edge[a

2014-08-18 18:17:41 1616

转载 Toposort(拓扑排序)——DFS递归回溯版

拓扑排序简单来说就是把一个图的所有节点排序,使得每一条有向边(u,v)对应的u都排在v的前面。 拓扑排序最大的用途就是判断一个有向图是否有环,当然判断还有一种方法就是Floyd算法。如果用邻接表的话拓扑排序的时间复杂度是O(N*E),邻接矩阵是O(N^2),N表示顶点数,E表示边数,Floyd时间复杂度是O(N^3)。性质1、 拓扑排序在有向无环图中才能排出有效的序列,否则能判断该

2014-08-18 16:23:58 2113

原创 UVA 10054 - The Necklace

#include #include int node[55], edge[55][55] = {0};int find_father(int x) { return x != node[x] ? node[x] = find_father(node[x]) : x;}int dfs(int cur) { for (int i = 0; i < 51; i++) if (ed

2014-08-18 14:45:40 1650

原创 UVA 10129 - Play on Words

#include #include int node[26];int find_father(int x) { return x != node[x] ? node[x] = find_father(node[x]) : x;}int main() { int t; scanf("%d", &t); while (t--) { int outdegree[26] =

2014-08-17 20:11:34 1563

转载 欧拉路与欧拉回路

对无向图: 定义:给定无孤立结点图G,若存在一条路,经过图中每条边一次且仅仅一次,该条路称欧拉路,若存在一条回路,经过图中每边一次且仅仅一次,该回路称为欧拉回路。具有欧拉回路的图称为欧拉图,不是柏拉图。定理:无向图G具有一条欧拉路,当且仅当G是连通的,且有0个或者是两个奇数度得结点。推论:无向图G具有一条欧拉回路,当且仅当G是连通的,并且所有结点的度数均为偶数。一笔画问题就是典型的

2014-08-17 16:23:59 1730

原创 UVA 10004 - Bicoloring

#include #include int edge[205][205], vis[205], flag, n;bool dfs(int cur, int color) { for (int i = 0; i < n; i++) if (edge[cur][i] && vis[i] == vis[cur]) flag = 0; for (int i = 0; i < n

2014-08-17 14:19:31 1632

原创 UVA 11205 - The broken pedometer

#include #include int main() { int t, vis[1<<15]; scanf("%d", &t); while (t--) { int LED[105] = {0}, n, m, num, ans = 20; scanf("%d%d", &n, &m); for (int i = 0; i < m; ++i) for (int j =

2014-08-16 16:36:44 1762

原创 UVA 639 - Don't Get Rooked

题目大意:给你一个#include char board[4][4];int ans, n, node[4][4];bool judge(int x, int y) { for (int i = x; i >= false && board[i][y] != 'X'; i--) if (node[i][y]) return false; for (int i = x

2014-08-15 19:37:47 1649

原创 UVA 167 - The Sultan's Successors

#include int board[8][8], vis[3][16] = {0}, max, t;void dfs(int cur, int sum) { if (cur == 8) max = (sum > max ? sum : max); else for (int i = 0; i < 8; i++) if (!vis[0][i] && !vis[1][i - cu

2014-08-15 15:22:52 1749

原创 UVA 208 - Firetruck

#include #include int edge[25][25], node[25] = {0}, road[25], valid[25], num, count;void check(int move) { valid[move] = 1; for(int i = 2; i <= 25; ++i) if(edge[move][i] && !valid[i]) chec

2014-08-15 11:31:34 1646

GeoLite2-City.mmdb IP 数据库更新于 2022-05-23

GeoLite2 GeoIP GeoIP2

2023-06-21

AutoHotkey 中文手册

AutoHotkey 中文手册

2017-08-06

数学之美 pdf

数学之美

2017-06-29

Java性能优化指南1.4版

Java性能优化指南1.4版

2017-06-27

MyEclipse2015 Stable2.0补丁

2016-09-09

空空如也

TA创建的收藏夹 TA关注的收藏夹

TA关注的人

提示
确定要删除当前文章?
取消 删除