算法之路
北冥有小鱼
这个作者很懒,什么都没留下…
展开
-
网易数列还原
题目分析:首先数列长度为n,且为1~n中不重复的数字,也就意味着每个数字必须出现且只出现一次。首先,记录下输入中已经出现过的数字,再找出还未出现的数字,通过对未出现的数字进行全排列,再插入到原数组中,将原数组中的0替代掉,然后对替代后的数组进行判断,暴力计算合格排列为K的数列个数。代码如下#include <iostream>#include <algorithm&g...原创 2018-08-14 17:07:39 · 667 阅读 · 0 评论 -
袋鼠过河
题目使用动态规划解法,定义dp[i]为跳到第i个木桩所需要的最小步数,但题中有几个坑,首先,i的范围为0~n,且初始位置为第一个弹簧,即dp[0]=0,且输出的解为dp[n+1]位置的步数,因为过完这些木桩才算完成。且dp数组必须先初始化为n+1个很大的数,不初始化的话,min函数则失去了作用,dp[i]一开始存的若是一个很小的数,则数组不会进行更新。代码如下:#include<...原创 2018-08-20 17:32:52 · 619 阅读 · 0 评论 -
扔鸡蛋-动态规划
题目: 2个鸡蛋,从100层楼上往下扔,以此来测试鸡蛋的硬度,比如鸡蛋在第9层没有摔碎而在第10层摔碎了,那么鸡蛋不会摔碎的零界点就是9层,如何用最少的尝试次数,测试出鸡蛋不会摔碎的临界点?(如果3个鸡蛋呢,如果m个鸡蛋呢)题目分析:用动态规划,最重要找到状态转移方程,就是写出母问题和子问题之间的关系!比如扔鸡蛋这个问题,你扔碎了,就转化成了往楼上找的子问题;你扔了没碎,那就转化成了往楼下找...原创 2018-08-23 19:45:54 · 370 阅读 · 1 评论 -
删除一部分数字,保留下来的数最大
题目分析: 每次删除1个数字,使得剩下数字组成的整数最大。 从前往后遍历,当遇到前一个数字小于后一个数字时,就将前一个数字删掉,并结束本次遍历,例如,325,2比5小,删除2。 去掉cnt个数字,因此循环cnt次。 由于题目中整数长度最大为50000,因此不用int,用string。代码如下:#include<stdlib.h>#include<stdio....原创 2018-08-29 10:53:56 · 2013 阅读 · 0 评论 -
红黑树之 原理和算法详细介绍
见:http://www.cnblogs.com/skywang12345/p/3245399.html转载 2018-08-25 16:29:08 · 196 阅读 · 0 评论 -
硬币问题
/*动态规划 需要拼凑的面额是n, 维护dp[i],表示取到i时的组合数目,dp[0]=1, 面额数组a[6]={1,5,10,20,50,100}, dp[j]=dp[j]+dp[j-a[i]],约数条件j>a[i]。 因为面额数目任意,所以需要分别处理只有面额1时, 组合钱数为1~n的各自组合数dp[1]~dp[n], 然后有面额...原创 2018-09-25 10:09:57 · 354 阅读 · 0 评论