解题报告
文章平均质量分 77
IT小晓鸟
生物本科背景,希望加入ITer的行列
展开
-
九度1080解题报告
明明是AC过一次的题,第二次来做却AC不了了,自己也没想通错在哪。题目如下http://ac.jobdu.com/problem.php?pid=1080进制转换问题,基本思路是把m进制数先转换成10进制数,在将10进制数转换成n进制数。转换成10进制,即每个位上的数值乘以对应的位权然后全部加起来,再转换成n进制,就是不断modn再除以n。当然,既然有大数,要构造bigint数据结构,原创 2014-02-25 22:59:23 · 641 阅读 · 2 评论 -
九度1081解题报告
http://ac.jobdu.com/problem.php?pid=1081递归算法显然最直观,可是复杂度太高一遇大数就超时。所以这里是用矩阵二分乘的方法,具体思路可参见《数学知识积累》。代码如下:#include #define MAX 1000000#define MOD 10000typedef struct matrix{ int a[2][2]; void se原创 2014-03-05 16:31:14 · 720 阅读 · 0 评论 -
九度1084解题报告
http://ac.jobdu.com/problem.php?pid=1084 整数拆分的题。根据这几天的做清华真题的情况,可以看出,清华超爱出数学类的题目,考察学生的数学基础和找规律的能力。这道题,乍一看是要找个什么公式或者规律来解决,其实仅仅用dp就可以解决,也就是说,要找出拆分种类的递推规律。本题主要有两条规律,即要分奇偶讨论。当要拆分的数为奇数时,其拆分种类与上一个偶数相原创 2014-03-05 20:41:15 · 578 阅读 · 0 评论 -
九度1552 动态规划
http://ac.jobdu.com/problem.php?pid=1552题目一看就是可以用dp的,但是对我来说找状态还是最困难的一件事。参考了别人的代码,才知道如果找合适的状态,并根据我自己的理解,定义了如下状态函数和状态转移方程:f[i][0]表示从左数第i个位置上是男生的合法排列数,f[i][1]表示从左数第i个位置上是女生的合法排列数,由此可知其该女生左边一定是女生。然而仅仅原创 2014-03-11 21:01:39 · 458 阅读 · 0 评论 -
动态规划中的“分两份”问题
九度中1358:陈博的平均主义http://ac.jobdu.com/problem.php?pid=1358 1420:Jobdu MM分水果http://ac.jobdu.com/problem.php?pid=1420 1462:两船载物问题http://ac.jobdu.com/problem.php?pid=1462都是我称之为“分两份”的问题,由于要分的两份的总原创 2014-03-13 22:08:12 · 571 阅读 · 0 评论 -
继续动态规划--安排问题
九度1499:项目安排http://ac.jobdu.com/problem.php?pid=1499九度1463:招聘会http://ac.jobdu.com/problem.php?pid=1463都是时间安排问题,dp数组下标可以表示时间也可以表示项目数,具体方法可以学习博客http://blog.csdn.net/wdy_yx/article/details/9833897,总结的原创 2014-03-14 14:30:08 · 752 阅读 · 0 评论 -
九度1160解题报告
http://ac.jobdu.com/problem.php?pid=1160一眼一看就知道是dp,但是苦于找不到状态转移。网上看到了递推关系,其实很简单:对于m个苹果,n个盘子的摆法,可以分为有空盘和无空盘两类,有空盘类,就是在m,n-1的所有摆法中加入一个空盘,而无空盘类,就是先拿出n个苹果每个盘各摆一个,在分配剩下的苹果。当然,要注意m#include int dp(int原创 2014-03-15 16:32:44 · 623 阅读 · 0 评论 -
hdu1080解题报告
后考研刷题时代正式开始,之前练dp意犹未尽,所以先拿dp题开刀,而且找了一道跟我原专业相关的题,基因序列匹配~http://acm.hdu.edu.cn/showproblem.php?pid=1080当年学生物信息学在书上看到了DNA序列匹配的动态规划算法,现在终于实现了它~其实就是最长公共子序列LCS的变形题,ac代码如下:#include #include #define原创 2014-03-27 23:57:55 · 615 阅读 · 0 评论 -
hdu动态规划集锦
发现一篇博文只写一题有点浪费空间,而且不利于分类和查找,所以把题目分类写在一篇博文里比较好~To The Maxhttp://acm.hdu.edu.cn/showproblem.php?pid=1081最大子矩阵问题,其实就是二维的最大子串和问题,要转化为我们熟悉的典型dp问题,就应该将二维转化为一维:预处理矩阵,原矩阵a[i][j]表示第i行第j列的元素,预处理后的矩阵原创 2014-03-28 10:48:54 · 617 阅读 · 0 评论 -
LeetCode:Reverse Words in a String
闲来无事刷leetcode,随便挑了一道翻转字符串的题,其实这道题之前在九度上做过,剑指offer里也有讲,但是我还是花了很久才AC。这次是用纯C写的,觉得用纯C处理字符串才锻炼真本事。 遇到这样的题,要习惯性地问几个问题: 1.字符串前后是否空格,有的话怎么处理,删除还是跟着一起旋转或者保持不变 2.单词之间的空格是否只有一个,如果不是,应该只保留一个还是跟着一起旋转 3.空格之原创 2015-06-04 21:16:06 · 529 阅读 · 0 评论 -
九度1085解题报告(机试出这种题我死定了)
http://ac.jobdu.com/problem.php?pid=1085我自己的方法是构造bigint数据类型,然后无脑循环乘求幂,然后再转换k进制,递归求解。这种做法的时间复杂度就不用说了,数据稍微一大一定超时。真正有效的做法代码很简单,却需要很强的数学知识和严格证明,自知达不到这个水平,果断引来大神的博客http://blog.sina.com.cn/s/blog_8619a258原创 2014-03-04 22:17:18 · 1000 阅读 · 0 评论 -
九度1086解题报告
http://ac.jobdu.com/problem.php?pid=1086典型的动态规划题,当然也可以用图的最短路径方法,但是对我来时dp实现起来容易一些。在这道题中,有两点值得注意,一是两站之间的距离和票价都可以达到10^9,故计算过程中可能出现比int范围大的数,因此需要用long long类型来存储数据;二是我自己思维不周密,只考虑到了起点站比终点站编号小这种情况,而忽略了反过来的原创 2014-03-04 12:25:02 · 659 阅读 · 0 评论 -
九度1491解题报告
http://ac.jobdu.com/problem.php?pid=1491举个例子来阐明解题的基本思路。例如,n=4321,我们对其各个数位进行分解,4321=4000+300+20+1,然后从低位到高位一次进行分析。个位1,只能含一个1,而十位20又可分为1~10和11~20,个位数字有两次循环,而每次循环会出现一个1和一个2,十位10~19又含有十个1,20含有一个2。百位300,低原创 2014-03-03 19:27:55 · 754 阅读 · 0 评论 -
九度1184解题报告
这是一个二叉树的问题,题目如下http://ac.jobdu.com/problem.php?pid=1184事实上考的就是二叉树的数据结构以及先序和中序遍历。一般来说,仅仅由先序遍历序列无法得到中序序列,然而,本题特殊的地方在于先序遍历序列中给出了遍历中遇到的空指针,这样就很容易根据序列构造二叉树:依次访问先序序列,遇到#就返回空指针,遇到非#字符就构造一个对应的节点,然后按照先左后原创 2014-02-25 21:02:52 · 706 阅读 · 0 评论 -
九度1137解题报告
大神们说没有更简单的方法,于是还是用模拟加法。题目如下http://ac.jobdu.com/problem.php?pid=1137 计算机里的浮点数加法,是先对阶,相加,然后规格化,类似地,在模拟的时候,我们也要对阶,即将输入的数分成小数部分和整数部分,然后相加,将结果输出。我将输入当做字符串处理,先超出两个数的小数点的位置,然后将小数部分对齐,即在较短的小数部分后面补零,然后相加原创 2014-02-28 13:30:21 · 727 阅读 · 0 评论 -
九度1019解题报告
关于计算器的题目http://ac.jobdu.com/problem.php?pid=1019,该题要编写的计算器比一般的计算器简单,因为不含括号,运算优先级就两种,先算乘除法就好,这是受到了fripSide同学的启发,不需要算术符号栈,只需要数字栈,遇加减号就将下一个数字入栈(遇减号将数字反号入栈),遇乘除号,就将栈顶的数字取出运算后再入栈。当处理完整个计算式时,将栈中的所有数取出相加,既得结原创 2014-02-28 11:06:48 · 597 阅读 · 0 评论 -
九度1139解题报告
最小子矩阵问题http://ac.jobdu.com/problem.php?pid=1139,是求最优解的一类题,看到题目就想到两种做法,一个是dp,一个是搜索遍历的方法。虽然深搜很多时候并不是用来解决最优解问题的,但是dp的做法,我暂时没有想到该怎么做,于是就先用DFS,代码如下:#include using namespace std;#define INF -999999999原创 2014-03-01 13:34:37 · 671 阅读 · 0 评论 -
九度1209解题报告
http://ac.jobdu.com/problem.php?pid=1209这是一道典型的动态规划0-1背包问题而且是求恰好等于某值的最优解。做法就是依次加入一张邮票,计算恰好等于M的邮票数,若恰好等于M有多个解,要选择最小的解(这也是我第一次WA没有考虑的情况,dp[m]不为零时要先进行比较,取最小值)。代码如下:#include using namespace std;int原创 2014-03-01 19:22:43 · 563 阅读 · 0 评论 -
九度1347解题报告
http://ac.jobdu.com/problem.php?pid=1347孤岛连通问题的实质就是求图的最小生成树问题,若非连通图就输出no。这里使用的是Kruskal算法,将所有边排序后,依次判断是否能让不连通的两定点连通,若可以,则并入该边,把该边的代价算入总代价。最后输出从代价,即最小代价,如不连通,则为no,判断连通用到了并查集。代码如下#include #include原创 2014-03-01 19:48:47 · 613 阅读 · 0 评论 -
九度1172解题报告
http://ac.jobdu.com/problem.php?pid=1172这道题原来做过可是一点印象都没有,竟然还是能想到用priority_queue来做,看来之前的练习还是有效果。其实今年考研408的算法题与这道题类似,但我当时并不知道这个结论:哈夫曼树所有叶节点的权重之和等于所有非叶结点的值的和,所以当时费了大量的时间做那道题,以至于组成原理的两道大题几乎完全没做,想想就心痛。不过原创 2014-03-01 20:16:58 · 784 阅读 · 0 评论 -
九度1140解题报告
http://ac.jobdu.com/problem.php?pid=1140八皇后问题早有耳闻,今日终得一见。其实是典型的回溯算法问题,思路较简单,即挨个下棋子,以判断下一个棋子的位置。然而我这道题做了很久,主要纠结在判断下一个棋子的问题上,我用mark二维数组标记当前哪些位置可以下,哪些位置不能下,以期下一个棋子判断时只需判断自己的mark是真或假,但是这种做法的最大问题在于回溯的时候,原创 2014-03-01 23:32:49 · 679 阅读 · 0 评论 -
九度1482解题报告
http://ac.jobdu.com/problem.php?pid=1482看到这种题,第一反应就是BFS。可是一开始为剪枝的问题犯愁,最终使用map实现标记已判定的串,其实有点大材小用,只是用到了map.find()的功能,想到其用的是红黑树实现,找起来效率较高,当然别人也有用hash实现的,效率更高,我只是懒得改了。接着就开始为记录树深度犯愁,记得学数据结构的时候,层次遍历是专门修改节原创 2014-03-03 21:19:50 · 743 阅读 · 0 评论 -
LeetCode: Reverse Linked List II
常规链表翻转的改版,注意记录翻转部分的头结点start及其前面的结点preStart、尾结点tail及其后面的结点postTail即可。在内部的结点翻转完毕(方法同常规链表翻转)后,将preStart->next = tail,start -> next = postTail,即可。代码如下:/** * Definition for singly-linked list. * struct Li原创 2015-06-05 11:59:19 · 452 阅读 · 0 评论