![](https://img-blog.csdnimg.cn/20201014180756724.png?x-oss-process=image/resize,m_fixed,h_64,w_64)
搜索
记忆星空
这个作者很懒,什么都没留下…
展开
-
pat1064
对于写递归次数不多的人来说,这个递归可能不是那么好写,代码中creat(x,y)返回的是我让你从编号x到编号y建一棵完全二叉搜索树的父亲节点编号,这个过程是通过计算,假如我有x,x+1,x+2,....y这么多个点建树,那么这棵树的左右子树分别是多少个点,递归建左右子树后,返回这颗树的父亲节点编号,建完树以后就一遍bfs非常简单了。代码如下:#include#include#inclu原创 2013-09-30 22:52:16 · 761 阅读 · 0 评论 -
poj2362
本题很早就看到过,一直拖到现在才做,本题就是一个排序+搜索+剪枝题,题意非常简单,说一下剪枝:1为了早点剪枝,将优先选择边长较长的棒子2棒子长度和是4 的倍数,最长的棒子小于边长,棒子个数要大于等于43符合2的情况下,我搜到3个边长,也意外着可以构成。代码如下:#include#include#include#includeusing namespace std;in原创 2014-01-19 12:15:00 · 719 阅读 · 0 评论 -
pat1018
个人认为这题在pat里面算是比较难了,主要是有2点,1,可能很多同学理解不了为什么车送出去了还得送回去,现在把问题简化,就给你一串数,a[1],a[2],a[3],,,,a[n],假设为了让这些数都变成一个k,我需要从a[0]拿出一些数,从左往右送,那么我最少需要拿出多少,才能保证后面的n个数都能变成k。2本题自己想了2种方法,第一是自己想出来的,记录所有最短路的路径,然后倒着搜回去,搜到起点做一原创 2013-09-30 23:37:47 · 773 阅读 · 2 评论 -
LeetCode Subsets && Subsets II
这是两个比较基础的搜索题(dfs),可能也叫做回溯法,个人觉得dfs一般都会有回溯,第一问比较简单,每次进入一个状态就把当前状态加入到ans中,如何只要在搜索过程中,记录当前的起点是第几个数,然后从该数往下搜索即可,注意保留现场,也就是push_back后还得pop_back,代码如下:vector >ans;vectortmp;void solve(int dep, vector &S){原创 2015-02-07 10:15:01 · 421 阅读 · 0 评论 -
LeetCode Palindrome Partitioning I&&Palindrome Partitioning II
一看到这个问题马上有一个类似矩阵连乘dp的思想,dp[i][j]表示第i个字符到第j个字符可以分的最少回文串数,那么有dp[i][j]=min(dp[i][k],dp[k+1][j]),k=[i,j-1],如果i到j不是回文;dp[i][j]=1,i到j是回文。用这样的方法首先要用数据isdc[i][j]来记录i位置到j位置的串是不是回文,计算这样的dp数组需要的时间复杂度是O(n^3),交上去超原创 2015-01-16 19:59:22 · 465 阅读 · 0 评论