上一页 1 ··· 5 6 7 8 9 10 11 12 下一页
摘要: 题目传送门:2711. 模板与STL代码: 1 #include 2 #include 3 #include 4 using namespace std; 5 6 7 class Complex{ 8 private: 9 int real;10 int imagine;11 public:12 Complex(int r = 0,int i = 0){13 real = r;14 imagine = i;15 }16 friend ostream & operator <<(ostream &dout,cons... 阅读全文
posted @ 2014-01-26 13:02 Jolin123 阅读(268) 评论(0) 推荐(0) 编辑
摘要: 堆排序时间复杂度是O(n lgn),并且具有空间原址性,即任何时候只需要常数个额外的元素空间存储临时数据。1. 堆 (二叉)堆是一个数组,可以被看成一个近似的完全二叉树,树上每一个节点对应数组中的一个元素。除最底层外,该树是完全充满的,而且是从左向右填充。 父节点,左孩子,右孩子的下标关系: 最大堆性质:A[PARENT(i)] >= A[i] 堆中最大元素存放在根节点中最小堆性质:A[PARENT(i)] <= A[i] 堆中最小元素存放在根节点中高度:定义一个堆中的节点的高度就为该节点到叶节点最长简单路径上边的数目。所以一个包含n个元素的堆的高度是Θ(lgn)一些基本过程:MA 阅读全文
posted @ 2014-01-26 08:10 Jolin123 阅读(440) 评论(0) 推荐(0) 编辑
摘要: 题目传送门:1006. Team Rankings思路: ABCDE总共只有120种排列,现在要找到字典序最小的那个,可以一个一个进行实验,算出每个与所有输入的距离和,找出距离和最小那个即可。生成全排列这里直接从12345加到54321,将其中的120个要的排列记录下来,代表ABCDE的字典序全排列。 计算两个排列的距离,可以考虑先用数组记录每个字母出现的位置,如BCAED和ACBDE,用数组31254和13245记录。开头两位31和13说明AB的顺序相反,距离加1,然后依次类推可以算出整个距离。代码: 1 #include 2 #include 3 #include 4 #include.. 阅读全文
posted @ 2014-01-19 18:11 Jolin123 阅读(416) 评论(0) 推荐(0) 编辑
摘要: 题目传送门:1150. 简单魔板思路: 这道题如果要从现在的情况通过A B C三种操作而得到目标数阵很难找到一种有效的方法。但是考虑总共的操作不会多于10步,可以考虑将10步可能产生的所有数阵记录下来,然后在寻找目标数阵,将得到这个数阵的操作过程输出即可。由于每次有3种操作,所以我用了类似于决策树的结构,如果下一步进入左子树代表A操作,中子树代表B,右子树代表C,在每一个树的节点用一个string存入得到当前节点的全部操作,然后递归的建立这棵树。 在寻找某个目标数阵的时候,用一个全局变量哨兵值进行判断是否已经找到,也是用递归的方法进行寻找,由于结果不能超过n步,所以设计函数的时候把n当做参.. 阅读全文
posted @ 2013-12-28 20:25 Jolin123 阅读(339) 评论(0) 推荐(0) 编辑
摘要: 题目传送门:1146. 采药思路: 典型的0-1背包问题,不像分数背包问题可以用贪心算法,所以只能用动态规划。dp[i][j]表示在限定时间j内,只从前i个山药里面取能得到的最大价值。dp的构建同样采用自底向上的方法。 对于第i个山药,考虑取与不取,有dp[i - 1][j]和dp[i - 1][j - t[i]] + v[i]两种情况,取较大值即可。代码: 1 #include 2 #include 3 using namespace std; 4 5 6 int main(){ 7 int t,m; 8 cin >> t >> m; 9 int times[... 阅读全文
posted @ 2013-12-10 23:20 Jolin123 阅读(447) 评论(0) 推荐(0) 编辑
摘要: 题目传送门:1264. Atomic Car Race思路: 如图,输入a1,a2,...an,图中共有n + 1个点,现在将这些点依次标记为0,1,2...n,现在要求找出由0到n的最短时间。 很容易发现求解这个问题的过程包含求解最优子结构的过程而且子问题是有重叠的,所以使用动态规划的方法。这里用s[n + 1][n + 1]来记录2个点之间的最短时间,任意 0 2 using namespace std; 3 4 int main(){ 5 int n; 6 while(cin >> n && n != 0){ 7 int a[n + 1]; 8 ... 阅读全文
posted @ 2013-12-10 11:28 Jolin123 阅读(455) 评论(0) 推荐(0) 编辑
摘要: 题目传送门:1687. Permutation思路: 求n个数其中有k个 ,或者这时有k - 1个的间隙插入,或者在末尾插入,共有n - k种。 这样就可以利用n -1的情况算n的情况。开始用了递归超时了,考虑到其中重复计算了很多次相同的情况,所以用数组result[n][k]把所有结果存进去,然后直接读入输出即可。代码: 1 #include 2 using namespace std; 3 4 5 const int MAXN = 101,MAXK = 101; 6 int result[MAXN][MAXK] = {{0}}; 7 8 int main(){ 9 res... 阅读全文
posted @ 2013-11-30 21:35 Jolin123 阅读(387) 评论(0) 推荐(0) 编辑
摘要: 上一节的利用有限自动机的匹配算法需要O(m|∑|)的预处理时间,因为预先已经把转移函数计算出来。而KMP算法则是将计算转移函数时需要的信息存储在数组π[1..m]中,按照即时的需要计算状态转移函数,这样可以把预处理时间减少到O(m),而匹配时间仍然是O(n)。Knuth-Morris-Pratt 算法 首先简单看一下朴素字符串匹配算法的过程。假设模式P = ababaca,图(a)是针对文本T模板的一个特定偏移s。 此时前5个字符匹配成功,第6个失败,这时已经匹配的前5个字符其实已经蕴含了下一个偏移可以利用的一些信息。如图,偏移s + 1必然无效,因为模式P前2个字符不等而第2个字符... 阅读全文
posted @ 2013-11-29 08:51 Jolin123 阅读(451) 评论(0) 推荐(0) 编辑
摘要: 题目传送门:1029. Rabbit思路: 题目说的有一点奇怪,兔子要过m个月才能长大,但是第m个月的时候已经可以生孩子了,这是需要注意的。 思路也比较简单,用一个rabbits[months_to_grow + 1]的数组存储各个月年龄的兔子数量,其中刚出生的存储在下标0中,成年的存储在下标months_to_grow中。显然下个月的时候rabbit[0] = rabbit[months_to_grow],并且其他年龄段的兔子年龄会向前推进,直到成年之后就一直在rabbit[months_to_grow]中。 看到样例 1267650600228229401496703205376 的... 阅读全文
posted @ 2013-11-28 15:31 Jolin123 阅读(230) 评论(0) 推荐(0) 编辑
摘要: 题目传送门:1093. Air Express 题目本身没有什么思维上的难度主要考察思维的严密性,注意有可能weight3 * rate3 2 using namespace std; 3 4 int min(int a,int b,int c); 5 6 int main(){ 7 int weight1,weight2,weight3,rate1,rate2,rate3,rate4,weight,set_number = 1; 8 while(cin >> weight1 >> rate1){ 9 cin >> weight2 >> rate 阅读全文
posted @ 2013-11-27 23:50 Jolin123 阅读(599) 评论(0) 推荐(0) 编辑
上一页 1 ··· 5 6 7 8 9 10 11 12 下一页