摘要:
转载地址:http://blog.csdn.net/shahdza/article/details/7986044 基础的搜索BFS和DFS,自己找题切吧...高级搜索的题集就在下面,自己看着办吧...努力爆搜,努力剪枝吧~~~【Level 1】HDOJ-1429 胜利大逃亡(续)HDOJ-1885 Key TaskHDOJ-1226 超级密码HDOJ-1664 Different DigitsHDOJ-2821 PusherHDOJ-2128 Tempter of the Bone IIHDOJ-3533 EscapeHDOJ-4101 Ali and BabaHDOJ-3839 An... 阅读全文
摘要:
很多事情就像是旅行一样,当你决定要出发的时候,最困难的那部分其实就已经完成了。 我不能在这里变老。我要在变老之前,做一些到了80岁还会微笑的事情。 我想,一个人最好的样子就是平静一点,哪怕一个人生活,穿越一个又一个城市,走过一个又一条街道,仰望一片又一片天空,见证一次又一次别离。然后在别人质疑你的时候,你可以问心无愧地对自己说,虽然每一步都走得很慢,但是我不曾退缩过。 阅读全文
摘要:
原题链接:http://poj.org/problem?id=1680 对这道题,我只能说:我不知道题目是什么意思,但是AC还是没有问题的。 看来题目半天没明白fork()怎么个工作,但是看样例(根据Loop)自己推出来是一个完全二叉树的前序遍历,而且PID非常的有规律,自己画图看看就知道了。 1 #include 2 #include 3 #define lson cur = maxn) return;33 if(d+1000 == tree[cur].tag)34 {35 if(flag)36 printf("Loop %... 阅读全文
摘要:
原题链接:http://poj.org/problem?id=2406 首先给出一个结论:对于给定长度为n的字符串,如果n % (n - next[n]) == 0,那么,n - next[n] 为字符串的最小周期(最小循环节)。 这里给出我自己的证明: 设字符串为s,长度为n,为便于叙述下标从1开始。 现在有next[n] = j,从next数组的定义出发我们知道s[n-j-j+1...n-j] = s[n-j+1...n],如下图: 显然灰色“区域2”为s[n-j-j+1...n-j],而由kmp匹配的过程可知,灰色的两个区域——区域2’和区域2是相等的,好了,继续重复这个步... 阅读全文
摘要:
原题链接:http://122.207.68.93/OnlineJudge/problem.php?id=1078 这道题与双序列的最长公共子序列毫不相干,其本质为单序列的最长上升子序列。 先离散化,然后用一个数组记录每个数字出现的位置(其实只需要记录第一行的序列),那么就可以转换成求最长上升子序列了,这里的上升是相对于某个数字的位置数组来说的(也就是n维的),比如(1,2,1) < (2,3,2),但(2,2,2)<(1,3,3)不成立。然后O(m2)求LIS就行了。 第一次用JAVA,还不是很熟练,不熟悉JAVA机制与优化,代码运行得比较慢。 1 import java.io. 阅读全文
摘要:
偶然看到Petr的AC代码,真的惊呆了,终于知道自己弱在哪里了,终于找到喜欢的风格了。 1 import java.util.List; 2 import java.io.IOException; 3 import java.io.InputStreamReader; 4 import java.util.Arrays; 5 import java.util.ArrayList; 6 import java.io.BufferedReader; 7 import java.util.Comparator; 8 import java.io.OutputStream; 9 ... 阅读全文
摘要:
原题链接:http://122.207.68.93/OnlineJudge/problem.php?id=1292 线段树+扫描线。这道题是典型的矩形面积并问题,乍一看109 * 109 * 105超了long long,但这个无关紧要,其实如果总面积>1018可以直接判断肯定有相交的面积了,这么一来,就是裸模版题了,贴膜板: 1 #include "cstdio" 2 #include "iostream" 3 #include "algorithm" 4 #define lson cur<<1 5 #define 阅读全文
摘要:
原题链接:http://poj.org/problem?id=3908 这道题实际上问的是:如何在并查集上删除一个节点但保持连通性(可删节点并查集)。其做法是新开一个pos[]数组,其初始化pos[i]=i,第k次删除节点那么pos[i] = n + k(实际上开辟了一个新节点,并用原节点和新节点做映射),以后再次访问节点 i 的时候用的是pos[i]。 1 #include <stdio.h> 2 #include <string.h> 3 const int maxn = 50000 + 5; 4 5 int f[maxn]; 6 int pos[maxn]; 7 阅读全文
摘要:
原题传送:http://poj.org/problem?id=1185 经典状态压缩动态规划。 由于每个炮兵的位置影响范围为2的行和列,导致状态很难表示,但我们注意到最多有10列,我们可以先对行进行状态压缩,由于m <= 10,则每一行最多只有60种状态(这些状态暴力枚举去除不符合的即可)。由于每个炮兵对其所在列有大小为2的竖直方向的影响范围,那么,显然,我们得开一个三维dp数组,分析得到转移方程为: dp[i, k1, k2] = MAX{dp[i-1, k2, k3] + b[k1]} 这条转移方程的dp[i, k1, k2]表示第i行选择第 k1 种状态,第i-1行选择第 k... 阅读全文
摘要:
题目链接:http://poj.org/problem?id=2353 题目要求的是这么一条路径:这条路径上所有数字的和最小,路径的走向只能向上、向左和向右。 动态规划题,到达某个房间的当前值与其下方、左方和右方三个房间有关,那么,可以推出转移方程为: dp[i][j] = min(dp[i][j], dp[i][k] + sum[j][k]) (sum[j][k]为当前楼层从房间k到j的花费) 对于上述方程,因为对于同一层楼的每一房间都枚举了其他所有房间,所以其复杂度为O(m*n*n),算法超时。 如果思考再深入一点点,就会发现,如果最优路径经过某层楼编号在区间[a, b]的房... 阅读全文
摘要:
原题链接:http://poj.org/problem?id=1655 题意很容易理解:去掉某个节点,求得到的森林中树最多有几个节点。 这道题为动态规划题,我的做法是这样的:开两个数组,dp1[]和dp2[],dp1[i]记录以i为根的树的总节点数, dp2[i]记录去掉节点i时得到的平衡度(所有子树中最多的节点数),此时计算dp2就是目标,那么,我可以进行两次dfs,dfs1搜索完成后得到dp1,dfs2完成后得到dp2,对于两次搜索,其核心分别是:dfs1: dp1[i] += dp1[k]; (k为节点i的子节点) dp2[i] = max(dp2[i], dp1[k]+1);... 阅读全文
摘要:
今天遇到一道海量数据处理方面的题,题目是这样的: 100w个数中找出最小的100个数。 那么题目稍微抽象出来就是这样的:在N个数中找出前n小的数。这种题有一个特点:N很大,n很小。那么,我们就可以利用最大堆在O(Nlogn)的时间复杂度内得出答案。 最大堆的数据结构模型不再赘述,可自行参照百科。 用最大堆解决上述问题的步骤是这样的: 1. 建空二叉堆,其大小为100(可以用链表方式的堆,但是本人更倾向于数组型的堆); 2. 对于原数据的前n个数,按照最大堆堆顶元素大于左右儿子的特性直接构造最大堆; 3. 对于后续元素v,如果v大于堆顶元素,则用v替换掉堆顶元素,... 阅读全文
摘要:
(一)前言 许久之前,斌牛就完成了对分形艺术中 L-System 的研究学习,其中的每个图形都是无比的冲击与震撼,几何之美,淋漓尽致。在此也感谢胡老师提供的分形艺术研究的点子。 附:斌牛L-System之学习总结博客:http://wybwzl.iteye.com/blog/1275520胡老师推荐BBC混沌理论视频: http://v.youku.com/v_show/id_XMTcyNjE2MzMy.html分形艺术网址推荐:http://paulbourke.net/fractals/ (二)正文 下面先给出一幅图感受IFS (Iterated Function System) 分形美. 阅读全文
摘要:
原题链接:http://acm.zju.edu.cn/onlinejudge/showProblem.do?problemId=4969 这题请教了牛B的安神才会了。 这道题是线段树的题目,解题思路是把一颗树及其子树用线段(区间)来表示,然后对区间进行修改查询操作。我的具体做法是这样的:对整棵树进行先序遍历,也就是一趟dfs,遍历过程中记录下访问节点的时间戳,那么dfs访问前和递归回来的往返过程得到两个时间点(id[i].l, id[i].r),也就是我们所转换成的区间的端点,由于是先序遍历,那么一棵子树内所有节点是连续的,则最后根节点的区间必定包含其子树节点的区间,这样就构成了线段树... 阅读全文
摘要:
今天用eclipse生成了一个工程的jar文件,拷贝到别的电脑发现运行不了,后来才发现是jdk版本不同造成的,如果用jdk1.7打包后用在jdk1.6上运行会提示找不到主函数,可能是我用了这么一个语法:switch(String s){ case:break; case:break; ……}这个语法在jre7下是可以编译通过的,而在jre6下编译不通过。所以,如果搞开发的话最好用旧一点儿、稳定一点儿的版本,因为jdk向上兼容的,用jdk1.6基本能保证所有人都能打开所生成的jar文件。 阅读全文