算法
文章平均质量分 75
这梦想不休不止
这个作者很懒,什么都没留下…
展开
-
寻找数组中的最大连续子串
数组中的最大连续子数组暴力,分析法(以一个点固定,减去前面从头开始组成的最小的子数组),动态规划(max=Max(S[i]+a[i+1],a[i+1]))主要是采用动态规划的方法进行处理,比较简单。用一个res记录最终结果,表示最大。max为临时的可能的结果。令a为总数组,也就是你要查找的数组S代表其中一个子串的加和(假设你已经加到了一定的程度),如果加和加上下一个a[i]还不原创 2018-02-07 22:07:22 · 1227 阅读 · 0 评论 -
动态规划解决最长公共序列
#include <iostream>#include <mem.h>using namespace std;//a为一种一个字符串,dir为方向阵,aindex为a的长,bindex为b的长,index用来模仿树的节点int LCS(char a[],char dir[100][100],int aindex ,int bindex,int index){...原创 2018-02-08 16:13:57 · 176 阅读 · 0 评论 -
天天写算法之Monkey and Banana
地址:点击打开链接emmmm,需要总结一波了,看到这个题第一眼的确有思路,但是码代码的时候还是犹豫了好一会。就是最佳状态的递推。dy【这次状态】 = dy【上一状态】+data【跳到这一状态的增加值】感觉和前面几篇加起来已经快把动态规划的简单问题都涵盖了吧。这个是动态规划严格递增序列的最大和,与之前求最长之类的不同。因此也mark一下。总结整理一下。#include <iostream>...原创 2018-03-22 20:23:13 · 315 阅读 · 0 评论 -
天天写算法之丑数Humble Numbers
题目点击打开链接emmm,这个题其实可以用动态规划做,但是我觉得完全没必要,而且动态规划显得高端一些,我觉得如果真的在考场上也很暗想的出来。。因此用了一个新的方法。这个方法用到了优先队列,也算是学了一个新的容器。很好用。思路是每次从队列弹出一个数据,分别*2 *3 *5 *7,然后在弹出一个来,直到满足题目要求。但是我当时想的是,有可能出现重叠,比如第一次弹出的数据处理完压栈以后,有可能出现比上次...原创 2018-03-22 21:57:31 · 193 阅读 · 0 评论 -
天天写算法之Bone Collector
哇,本以为逃出了dp问题,结果转身又掉了进去。我的脑子哇。这次是0 1背包问题,感觉和我之前遇到的不太一样,还没有切实的编过程序。来看看哇。我一开始的思路是找单位体积价值最大的,进行填充,发现WA了,想了老一会,哦~~~原来是有可能一个单位体积价值最大的,导致空间剩余,使其在空间上变小。如果是可以分割的话,估计就正确了。上一波错的代码:#include <iostream>#incl...原创 2018-03-22 23:40:06 · 411 阅读 · 0 评论 -
天天写算法之HDU how many trees
Catalan序列的应用原题地址点击打开链接整个这一个章节都是围绕着大数以及Catalan和第一斯特林数来的总结一下Catalan的用处:1.括号化问题:矩阵链乘: P=a1×a2×a3×……×an,依据乘法结合律,不改变其顺序,只用括号表示成对的乘积,试问有几种括号化的方案?(h(n-1)种)2.出栈次序问题:一个栈(无穷大)的进栈序列为1,2,3,..n,有多少个不同的出栈序列?类似:有2n个...原创 2018-03-19 15:47:53 · 262 阅读 · 0 评论 -
天天写算法之ACboy needs your help
题目点击打开链接这个题,是我做的第三个背包问题吧。背包问题总是以一个变量为容器,这个题明显是天数。做题少,所以也没见过大的01背包问题。一开始想把数据存成更基础的形式,但是发现天数有前后关系。于是只能硬写。代码如下,简单易懂#include <iostream>#include <iomanip>#include<queue>#include<mat...原创 2018-03-23 14:09:57 · 203 阅读 · 0 评论 -
天天写算法之Tempter of the Bone
地址:点击打开链接如我所想,跨过了BFS,就是DFS,然而上来的这个题和我想得不大一样,还难了一些。用的是递归的方法。而且里面还有许多小trick#include<iostream>#include<cstring>#include<cstdio>#include<cmath>#include<queue>#define inf...原创 2018-03-29 21:55:07 · 190 阅读 · 0 评论 -
天天写算法之Prime Ring Problem
点击打开链接一个纯粹的DFS的题,主要是看用什么写法会简单,并且一次写对。用一个num,存储数列,并且因为要输出所有满足要求的数据,因此需要判断何时输出这个数据,并且还需要考虑如何考虑最后一个数据与开头数据加和仍然为质数的问题。因此需要两个数组,一个记录访问,一个记录每个位置的数据。#include<iostream>#include<cstring>#include&...原创 2018-03-29 23:10:47 · 410 阅读 · 0 评论 -
杭电ACM 1297 Children’s Queue
http://blog.csdn.net/xujinsmile/article/details/7364307转载 2018-03-20 21:15:57 · 227 阅读 · 0 评论 -
天天写算法之Sudoku Killer
点击打开链接这个题就是一个DFS,这里注意的是,搜索条件是,满足同一行,同一列,没有相同元素,且组成的小正方体内也没有相同元素。另外一点,就是完成条件,即所有的?的个数都被记录下来,解决的step等于?的个数。#include<iostream>#include<cstring>#include<cstdio>#include<cmath>#...原创 2018-03-30 16:48:02 · 255 阅读 · 0 评论 -
天天写算法之蜘蛛牌
点击打开链接连接这个题我完全没懂是什么意思,我看了很多代码,我也模仿了一遍,然后回想了一下,于是就想不通了,先看一个例子这是AC代码的结果:我以为是按照从大到小排列起来,但是这俩的结果竟然一摸一样,忽然我就不知道这是在做啥了。求大神解释一波。这个题到底是要干什么?到现在为止,我重新回来审了一遍题,发现了这个题的意思,同时也理解了代码的操作。AC代码:#include<iostream>...原创 2018-03-30 14:26:52 · 794 阅读 · 0 评论 -
天天写算法之Robberies
点击打开链接这个题,一开始做的时候,我竟然天真的按着案例相加,竟然全对上了,于是就上了贼船,用possible作为了容器。但后来看了一些资料以后,发现应该用总的value作为容器,求得是价值,以价值为消耗来做。不可以用possible的原因是,初始化的时候都为0,显然是不合理的。最后还被一个地方卡了半天,那就是可能一分钱都没偷到,百分之百不被抓~。 ~#include <iostream...原创 2018-03-24 22:03:04 · 179 阅读 · 0 评论 -
天天写算法之Watch The Movie
地址:点击打开链接此题有问题,有大佬,可以帮忙解释一下。没想通越来越多了,现在是二维背包问题了。一维已经解决不了3个里选2个的需求了dp[i][j],其中i代表能买的东西的件数,j代表总看的时间。这里初始化的时候使用了如下代码repfe(i,0,shop_sale) { repfe(j,0,sum_time) { if(i=...原创 2018-03-24 23:05:07 · 176 阅读 · 0 评论 -
天天写算法之I NEED A OFFER!
点击打开链接这个题目,我只有一个问题,那就是为什么dp初始化的时候都必须为1???这代表一开始都必然不会录取?有谁能解释一下吗?代码如下:百思不得其解。我把dp初始化为2,结果就全错了。#include <iostream>#include <iomanip>#include<queue>#include<math.h>#include<...原创 2018-03-24 23:40:04 · 254 阅读 · 0 评论 -
天天写算法之N皇后问题
点击打开链接存储的话用一个一维数组,用下标当作x或者y的位置,数值等于另一个(x或y)这个题的主要问题就是如何判断对角线。这个就有一个小技巧了,如何判断,那就是如果在一个对角线上,那么y1-y2 = x1-x2代码如下#include<iostream>#include<cstring>#include<cstdio>#include<cmath&g...原创 2018-03-30 19:45:25 · 162 阅读 · 0 评论 -
天天写算法之
点击打开链接这个题,诶~~~,转变一下思路,当时一心想着用背包解决,把正确思路给淹没了。#include <iostream>#include <iomanip>#include<queue>#include<math.h>#include<algorithm>#include<string.h>#include&...原创 2018-03-25 13:16:17 · 137 阅读 · 0 评论 -
天天写算法之Can you solve this equation?
写这段代码的时候遇到一个问题,在下面注释着,就是迭代的过程中,我写成了下面的样子,一直返回nan,后来才发现,每次迭代都返回给上一层,因此这一层,但是上一层却没有返回,因此就w了double getRes(double left ,double right ,double target ){ if(getTemp(left)>target||getTemp(right)<t...原创 2018-03-25 14:44:58 · 121 阅读 · 0 评论 -
天天写算法之Strange fuction
地址:点击打开链接这个主要是药算斜率为0的点。如下代码#include <iostream>#include <iomanip>#include<queue>#include<math.h>#include<algorithm>#include<string.h>#include<stdlib.h>#原创 2018-03-25 15:13:08 · 272 阅读 · 0 评论 -
天天写算法之HDU 2604 Queuing
膜拜一波大神代码分析:矩阵快速幂题目地址:HDU 2604 Queuing题意: n个人排队,f表示女,m表示男,包含子串‘fmf’和‘fff’的序列为O队列,否则为E队列,有多少个序列为E队列: 矩阵快速幂入门题。 用f(n)表示n个人满足条件的结果,那么如果最后一个人是m的话,那么前n-1个满足条件即可,就是f(n-1); 如果最后一个是f那么这个还无法推出结果,那么往前再考虑一位:那么后三...转载 2018-03-21 11:52:55 · 152 阅读 · 0 评论 -
天天写算法之Max Sum
题目地址点击打开链接贴代码,需要一个临时存储最大值的,一个最终存储最大值的。遍历所有的情况,复杂度线性。动态规划的思想#include <iostream>#include <iomanip>#include<queue>#include<math.h>#include<algorithm>#include<string....原创 2018-03-21 12:35:48 · 1777 阅读 · 0 评论 -
天天写算法之Common subsequence
不是很明白在自己的电脑上开1000*1000的数组,直接就炸了,但是却能AC。emmmm,于是改写了递归,很荣幸的超时了。递归程序:int Lcs(string a , string b , int aindex , int bindex,int num){ int res = num; if(aindex==0||bindex==0) { return ...原创 2018-03-21 14:51:51 · 341 阅读 · 1 评论 -
天天写算法之pie
题目太长了,意思是,有n个蛋糕,分给f个人,要求蛋糕不能拼接。因此就是分成f份,因此需要从最大的那个蛋糕走,还是二分的问题。#include <iostream>#include <iomanip>#include<queue>#include<math.h>#include<algorithm>#include<stri...原创 2018-03-25 16:39:37 · 658 阅读 · 0 评论 -
天天写算法之Can you find it?
#include<cstdio> #include<algorithm> using namespace std; int a[505],b[505],c[505],f[250010]; int binary(int x,int M,int k) { for(int i=0; i<M; i++) { ...原创 2018-03-25 17:23:54 · 347 阅读 · 0 评论 -
天天写算法之Toxophily
#include<cstdio> #include<cmath> #define PI acos(-1.0) double x,y,v; inline double calculate(double angle)//已知角度计算所能达到高度的函数 { double time; time=x/( v*cos(angle) ); ...原创 2018-03-25 21:47:57 · 191 阅读 · 0 评论 -
天天写算法之
地址点击打开链接下面是最好的解释了。没有用到二分法。理论上应该用二分。代码解释的很清楚了#include <iostream>#include <iomanip>#include<queue>#include<math.h>#include<algorithm>#include<string.h>#include&...原创 2018-03-25 22:28:51 · 106 阅读 · 0 评论 -
天天写算法之Hat’s Words
点击打开链接题目大概的意思是:输入一堆字符串,判断哪些字符串可以由其他两方字符串组成。一开始我想到的是并查集,但后来仔细想了想后,发现并查集,处理连续不连续问题的时候只适合区间问题。就是【5 7】这种类型的,我要是想解决字母问题的话,我就得把char一个个存进去,然后来了新的以后,判断是不是共同的parent,但是这个时候问题就又来了,即使是共同的parent,还需要更加细致的判断才可以说明组成...原创 2018-04-08 14:05:30 · 174 阅读 · 0 评论 -
天天写算法之统计难题
地址:点击打开链接这个题的bug就是G++编译的时候会一直Memory out,用C++交,就行了还有注意第一个的结束条件,是空格,而不是EOF代码如下:#include <iostream>#include <cstdio>#include <cstring>#include<malloc.h>using namespace std;s...原创 2018-04-08 14:41:49 · 104 阅读 · 0 评论 -
天天写算法之Flying to the Mars
点击打开链接这题目乍一看,不就是求众数嘛?然后要用字典树,总感觉大材小用,虽然也可以,懒得写了,Mark一波点击打开链接原创 2018-04-08 15:34:44 · 203 阅读 · 0 评论 -
天天写算法之Super Jumping! Jumping! Jumping!
不得不承认自己头脑的思维存在一些bug,有的时候就是转不过来。动态规划这一节体现的太明显了。地址:点击打开链接这个题是求最大和,并且要求递增。我在一开始做的时候没理解清楚,以为要求是最长,并且最大和。这里要搞清楚,最长序列不一定最大。例如1 19 2 3 4 ,明显 1 19组成的递增序列要比1 2 3 4 组成的序列大得多。用A数组记录所有的数据。用一个sum数组记录到当前这个节点之前...原创 2018-03-21 17:20:35 · 330 阅读 · 0 评论 -
天天写算法之确定比赛名次
点击打开链接给出一定的数据,前面的名次大于后面的,求最终排名跨过了字典树,迎来了拓扑排序。整体的算法是这样的代码如下:#include <iostream>#include <cstdio>#include <cstring>#include<malloc.h>using namespace std;#define MAX 510in...原创 2018-04-08 16:42:13 · 322 阅读 · 0 评论 -
天天写算法之Sequence one
这个题,我发现了不是所有的dfs都必须要用到vis[i]= 1 ~dfs~ vis[i]=0,这样的结构。这个题技巧好多,膜拜了一波大神代码,按着思路摸了一遍。主要是注意整体的解题思路以及减枝操作:技巧一:重判,这里有两个重判,第一个重判是判断如果搜索的是子序列的第一个元素,那么判断从原始序列开始到当前位置是否已经出现过该元素,若出现过则之前肯定搜索过该元素,则放弃该元素的搜索。第二个重判,当...原创 2018-03-31 16:21:33 · 240 阅读 · 0 评论 -
天天写算法之Sequence two
地址点击打开链接哇,这两个题,写的我头皮发麻。这个和上一个的区别就是这个要求输出按字典序,也就是1 3 2 在上题目中是1 3 和 1 2而这一题输出顺序为1 2 和 1 3.理论上这个题比上一个题目要简单。这个题的限制其实就两个,一个是排完序后,你需要记录原来的位置,不但要数值上不递减,还要求index索引上递增。因此只有当前索引大于上一索引时,才可以通过。另一个限制,就是比如 2 3 3...原创 2018-03-31 20:32:37 · 172 阅读 · 0 评论 -
天天写算法之Dota all stars
#include <iostream>#include <string>using namespace std;int n,sum;class dynamicArray{private: int num;public: dynamicArray *next; // 构造函数 dynamicArray():num(0),...原创 2018-03-31 22:24:51 · 144 阅读 · 0 评论 -
天天写算法之FatMouse's Speed
智商欠费系列,记录路径点击打开链接#include <iostream>#include <iomanip>#include<queue>#include<math.h>#include<algorithm>#include<string.h>#include<stdlib.h>#include&a原创 2018-03-21 20:29:49 · 251 阅读 · 0 评论 -
天天写算法之产生冠军
点击打开链接这个题有一些小bug,比如你要决出冠军来,我如果1 是冠军,然后剩下的里面可以形成环。那么理论上这就不可以,不是很明白。下面的思路是先看一波一上来入度为0的点是不是一个,如果不是那么久直接gg,我觉得还应该判断环的问题,可是题目并木有。#include <iostream>#include <cstdio>#include <cstring>#...原创 2018-04-08 18:55:09 · 215 阅读 · 1 评论 -
天天写算法之命运
发现自己对动态规划还是不能了然于掌。大概的思想就是:假设知道上一次最佳的路线,计算这一次的。而上一次最佳的路线不一定就能算出这一次最佳的路线,因此需要对上一次所有的路线进行一个处理。点击打开链接动态规划的递推公式p[i][j] = max(dp[i-1][j],dp[i][j-1],dp[i][k]) + data[i][j]。其中dp[i][j]表示男主角到达第i行第j列所能达到的幸运值的最大值...原创 2018-03-21 23:15:44 · 208 阅读 · 0 评论 -
天天写算法之免费馅饼
点击打开链接原题链接这个题坑真的很多,先说的确是dp问题,为什么会想到dp呢,因为这一个chapter都是dp。设a[i][j]为第i秒的j位置掉下的馅饼数量,f[i][j]为第i秒在j位置接馅饼最多可以接到的最多馅饼数量。由于每秒只能移动一个位置:f[i][j] = max(f[i - 1][j - 1], f[i - 1][j], f[i - 1][j + 1]) + a[i][j];得到了这...原创 2018-03-22 10:06:23 · 275 阅读 · 0 评论 -
天天写算法之Entropy
地址点击打开链接这个题目,emmmm,霍夫曼编码,都给忘了。还是借鉴的网上的思路,很清晰。离root近的应该放frequent大的,反之则放小的。用了两次队列,第一个权重队列,用于合并每次的最小的两个节点。另一个队列,用于从上往下进行运算编码长度。#include <iostream>#include <cstdio>#include <cstring>#...原创 2018-04-08 21:39:56 · 405 阅读 · 0 评论 -
天天写算法之Box Relations
待解决,Mark原创 2018-04-08 21:42:23 · 129 阅读 · 0 评论