posted @ 2010-04-20 10:59 Ryen_lee 阅读(288) 评论(0) 推荐(0)
摘要:
表达式可以查看这篇文章: C/C++ 语言中表达式的求值。结合性的理解为:结合性用于在几个操作符具有相同的优先级时确定先执行哪一个。每个操作符拥有某一级别的优先级,同时也拥有左结合性或者右结合性。所有的赋值符(包括复合赋值符)都具有右结合性(从右到左执行),因此可以使用连等的赋值形式。唯一的三目运算符?:也是具有右结合性的。 所有优先级相同的操作符,它们的结合性也相同,这是必须如此的。 阅读全文
摘要:
第九章动态规划的基本思路:找到问题的最优子结构确定状态写出状态转移方程。 注: 如果发现状态无法转移,我们常考虑增加状态的维度。使用动态规划的动机: 1. 问题是线性的,容易找到最优子结构。 2. 问题是一个多阶段决策问题。动态规划中解答路径的输出不记录,求解完所有状态后,通过状态转移方程递推求出每一步的决策。(注意使用记忆化搜索DP时,打印方案也需要使用函数而不是数组)记录每一步的决策。(LCS问题不好处理)记录方案,每次更新全局最优解时同步跟新方案。动态规划的递推方向:向前递推可以边输入边递推。但是较难按字典序输出方案第十一章 首先总结一下图论中的一些概念: 连通: 如果在一个无向图中从每 阅读全文
posted @ 2010-03-07 18:19 Ryen_lee 阅读(1547) 评论(0) 推荐(0)
摘要:
The Suspects(1611,): 考察并查集的基本使用,路径压缩可以有效提升效率。结果要统计含有‘0’元素的集合内元素的个数。Ubiquitous Religions(2524,):一样考察并查集基本使用,结果需要统计所有的集合的个数。Risk(1603,):任意点最短路径,直接只用floyd即可,注意memset(d, 1, sizeof(d));的效果(此时有const int INF = 16843009;)。Freckles(2560,):最小生成树,使用Kruskal算法,并查集使用路径压缩可以0MS。该题中用qsort对边的长度通过编号进行间接排序,应该是w[a] w[ 阅读全文
posted @ 2010-03-07 18:18 Ryen_lee 阅读(504) 评论(0) 推荐(0)
摘要:
A*算法不同于一般搜索算法就是其有一个估价函数 f(x). 每个节点的f(x) = g(x) + h(x)。g(x)是对从初始节点到当前节点所需最小费用的估计,h(x)是从当前节点到目标节点的所需最小费用估计(两个都是估计,前者偏大,后者偏小)。我们每扩展出来一个节点后都要计算其在当前状态下的f值, 其中h值只于当前状态有关,而g值则与当前节点是如何扩展来的有关(一般就是父节点深度+1)。任意一节... 阅读全文
posted @ 2010-03-05 14:54 Ryen_lee 阅读(702) 评论(2) 推荐(0)
摘要:
History Grading(,111):DP上来就给个下马威,这题据说是LCS,首先题意就非常容易读错,看懂题意后,我想当然的定义了错误的状态转移方程(虽然是美好的O(n)),导致一直WA,后来改正后,用O(n^2)方法AC。由此肯见,状态的定义一定要好,并且要注意检查状态转移方程是否能满足状态的定义。Longest Common Subsequence(,10405):就是LCS, 注意输入可能有空行,需要返回0,这样输入函数也需要使用gets才行。gets读入失败时返回0。Coin Change(,674): 设置状态方程时要考虑可能出现重复的问题,使用定序方法解决,开始提交一直AC, 阅读全文
posted @ 2010-02-11 16:42 Ryen_lee 阅读(783) 评论(0) 推荐(0)
摘要:
第五章C++中结构体的使用:类似与类,可以定义构造函数,重载运算符。qsort的使用: 其默认是增续排列,自定义比较函数,该函数使用时不拘一格。第六章ACM题目中尽量使用数组来实现链表。指针访问比用“数组+下标”方式略快。第七章生成1~n排列的方法基本思想是用递归,先输出所有以1开头的排列,然后输出所有以2开头的排列,最后输出以n开头的。伪代码如下:[代码]对集合S的元素进行排序,然后统计各个元素出现的个数,可以得到生成可重集的程序:代码STL提供了 next_permutation函数,可以按照字典顺序生成排列:代码枚举子集的三种方法:增量构造法:每次首先打印当前子集合,然后尝试按照定序选择 阅读全文
posted @ 2010-02-04 17:23 Ryen_lee 阅读(560) 评论(0) 推荐(0)
摘要:
ID Codes : next_permutation, STL水过,自己实现了个字符版本。Birthday cake: 竟然使用随机数水过了,怪哉。The Hamming Distance Problem(,729): 按字典序枚举排列,如果最后一行多输出空行会WA。Island of Logic(1478,): 经典题,基本思想是枚举所有可能状态,根据输入判断。一个好的策略是用每条输入对所有状态进行筛选,矛盾的置零,则用所有输入进行筛选后剩余的状态即为可能状态,这样比用每个状态来检测所有输入是否都可行要方便些(改变了循环的内外顺序,但是不影响结果)。注意可以有不均匀进制来表示状态(进制推广 阅读全文
posted @ 2010-02-03 11:24 Ryen_lee 阅读(637) 评论(0) 推荐(0)
摘要:
"Accordian" Patience : 链表,一遍过,可以考虑使用数组链表。 The Blocks Problem :使用数组,堆栈。 局部变量使用太滥,导致同步问题。 Parentheses Balance:直接使用堆栈即可。 注意fgets最后含有’\n’。 输出最好写在一起. 代码Tree Summing: 二叉树的解析,注意递归的理解。 ungetc()函数的使用,isspace() 函数可以判断所有空白符,(空白符指空格、水平制表、垂直制表、换页、回车和换行符) 另外,关于getc函数可以看一下这篇文章Quadtrees: 四叉数的构建。对递归理解不深致使一直WA,需要对递 阅读全文
posted @ 2010-01-18 20:21 Ryen_lee 阅读(523) 评论(0) 推荐(0)
摘要:
Integer Inquiry(1503, 424): 大整数加法,照定义写就行。Poj-AC, UVA-WA。Palindromes(1590 401): 回文数,Poj一遍AC。Excuses, Excuses!(1598,409): 字符串匹配。使用了strtok进行分词,还可以参考strstr函数。 POJ-AC。Artificial Intelligence?(2256, 537): 字符串匹配,提取数据。 POJ-WA, UVA-AC。Master-Mind Hints(N/A, 340): 就是猜数字,桶排序通过,注意桶排序时下标的范围,RE了一次了。100题 MARKWhere 阅读全文
posted @ 2010-01-15 22:17 Ryen_lee 阅读(649) 评论(0) 推荐(0)