DP/Recursion/Backtracking
文章平均质量分 72
chiiis
这个作者很懒,什么都没留下…
展开
-
判断是否字符串重组 Scramble String @LeetCode
思路:1 递归:简单的说,就是s1和s2是scramble的话,那么必然存在一个在s1上的长度l1,将s1分成s11和s12两段,同样有s21和s22。那么要么s11和s21是scramble的并且s12和s22是scramble的;要么s11和s22是scramble的并且s12和s21是scramble的。如果要能通过OJ,还必须把字符串排序后进行剪枝http://原创 2013-12-31 08:18:47 · 14621 阅读 · 2 评论 -
递归函数一定要弄清楚这个函数是做什么用的,基于什么条件返回什么结果!
总结一下:写递归时一定要清楚这个递归函数的每个参数是干嘛用的,以及这个递归函数是干什么用的,返回了什么结果。两篇文章都有提到!So, here are the steps to writing a recursive function.Write a prototype for the recursive function.Write a comment that describes原创 2014-01-03 15:54:18 · 2694 阅读 · 0 评论 -
DP24 最优BST Optimal Binary Search Tree @geeksforgeeks
Given a sorted array keys[0.. n-1] of search keys and an array freq[0.. n-1] of frequency counts, wherefreq[i] is the number of searches to keys[i]. Construct a binary search tree of all keys such tha原创 2013-12-28 06:05:29 · 2525 阅读 · 0 评论 -
DP22 堆盒子问题 Box Stacking Problem @geeksforgeeks
You are given a set of n types of rectangular 3-D boxes, where the i^th box has height h(i), width w(i) and depth d(i) (all real numbers). You want to create a stack of boxes which is as tall as possi原创 2013-12-28 03:19:33 · 3274 阅读 · 0 评论 -
DP23 Bellman–Ford Algorithm @geeksforgeeks
Given a graph and a source vertex src in graph, find shortest paths from src to all vertices in the given graph. The graph may contain negative weight edges.We have discussed Dijkstra’s algorithm fo原创 2013-12-28 04:57:56 · 2708 阅读 · 0 评论 -
DP21 LIS的变种问题-建桥问题 Variations of LIS-Building Bridge @geeksforgeeks
We have discussed Dynamic Programming solution for Longest Increasing Subsequence problem inthis post and a O(nLogn) solution in this post. Following are commonly asked variations of the standard LI原创 2013-12-28 02:23:47 · 2046 阅读 · 0 评论 -
DP25 子集和问题 Subset Sum Problem @geeksforgeeks
同分割区间问题:http://blog.csdn.net/fightforyourdream/article/details/17602699Given a set of non-negative integers, and a value sum, determine if there is a subset of the given set with sum equal to give原创 2013-12-28 06:35:50 · 2409 阅读 · 0 评论 -
DP20 求pair的最大长度链 Maximum Length Chain of Pairs @geeksforgeeks
是LIS的变型题,如果遇到两维则先排序一维再对另一维动态规划You are given n pairs of numbers. In every pair, the first number is always smaller than the second number. A pair (c, d) can follow another pair (a, b) if b < c. C原创 2013-12-27 09:33:16 · 1553 阅读 · 0 评论 -
DP19 自动换行问题 Word Wrap Problem @geeksforgeeks
挺复杂的一题,用了多个dp数组来保存过程量Given a sequence of words, and a limit on the number of characters that can be put in one line (line width). Put line breaks in the given sequence such that the lines ar原创 2013-12-27 07:34:51 · 2274 阅读 · 0 评论 -
DP18 分割区间问题 Partition problem @geeksforgeeks
思路:把能否划分区间的问题转化为能不能找到一个使得和为总和的一半的子区间,然后转为01背包问题,分析每一个元素是否取Partition problem is to determine whether a given set can be partitioned into two subsets such that the sum of elements in both subsets原创 2013-12-27 04:44:06 · 2274 阅读 · 0 评论 -
DP17 最少回文切割次数 Palindrome Partitioning @geeksforgeeks
Given a string, a partitioning of the string is a palindrome partitioning if every substring of the partition is a palindrome. For example, “aba|b|bbabb|a|b|aba” is a palindrome partitioning of “ababb原创 2013-12-27 03:55:35 · 1935 阅读 · 0 评论 -
DP16 Floyd Warshall Algorithm @geeksforgeeks
The Floyd Warshall Algorithm is for solving the All Pairs Shortest Path problem. The problem is to find shortest distances between every pair of vertices in a given edge weighted directed Graph.原创 2013-12-27 03:07:16 · 1478 阅读 · 0 评论 -
DP9 二项式系数 Binomial Coefficient @geeksforgeeks
Following are common definition of Binomial Coefficients.1) A binomial coefficient C(n, k) can be defined as the coefficient of X^k in the expansion of (1 + X)^n.2) A binomial coefficient C(n, k原创 2013-12-25 05:38:42 · 1446 阅读 · 0 评论 -
DP31 取大小游戏中的最优策略(附:如何对DP[0][n]进行对角线递推) Optimal Strategy for a Game @geeksforgeeks
Problem statement: Consider a row of n coins of values v1 . . . vn, where n is even. We play a game against an opponent by alternating turns. In each turn, a player selects either the first or last co原创 2013-12-29 13:23:48 · 1956 阅读 · 0 评论 -
LCS 最长公共子序列
这一片文章写得非常好,放在这里。LCS:又称 最长公共子序列。 其中子序列(subsequence)的概念不同于串的子串。它是一个不一定连续但按顺序取自字符串X中的字符序列。 例如:串"AAAG"就是串“CGATAATTGAGA”的一个子序列。 字符串的相似性问题可以通过求解两个串间的最长公共子序列(LCS)来得到。 当然如果使用穷举算法列出串的所有子原创 2014-02-27 01:29:37 · 2964 阅读 · 1 评论 -
Edit Distance 编辑距离算法 @LeetCode
又是一道典型DP!我们将人生划为诡异的阶段我们把这个世界表为丰富的状态package DP;import java.util.Arrays;/** * Edit Distance * * Given two words word1 and word2, find the minimum number of steps required to conve原创 2013-10-27 14:15:42 · 5495 阅读 · 1 评论 -
翻转整数 Reverse digits of a number
两种方法翻转一个整数,顺序翻转和递归翻转这里没考虑overflow的情况递归的作用是使得反向处理,即从递归栈的最低端开始处理,通过画图可得。如果是rec(num/10):123451234123121 package recursion;public class Reverse_digits_of_a_number { public static void main(Str原创 2014-07-06 03:06:13 · 1967 阅读 · 1 评论 -
给出一个set的字符和一个正数k,求所有由这个set能组成长度为k的字符串集合 print-all-combinations-of-given-length
// 给出一个set的字符和一个正数k,求所有由这个set能组成长度为k的字符串集合 /* Input: set[] = {'a', 'b'}, k = 3 Output: aaa aab aba abb baa bab bba bbb Input: set[] = {'a', 'b', 'c', 'd'}, k = 1 Output: a b c dpackage recursion原创 2014-07-05 07:21:04 · 1770 阅读 · 0 评论 -
打印出大小为n的数组(可能有重复元素)里所有可能的组合
Input: {1, 2, 3, 4}, r=2 Output: {1, 2}, {1, 3}, {1, 4}, {2, 3}, {2, 4} and {3, 4}.package recursion;import java.util.ArrayList;import java.util.Collections;public class Print_all_possible_com原创 2014-07-05 09:17:32 · 2029 阅读 · 0 评论 -
判断一个整数是否为回文数 Check if a number is palindrome
一种方法是先翻转当前数,然后把它和原数比较(略)另一种是递归方法,借用一个复制数,对原数递归,使之翻转,然后配合复制数比较package recursion;public class Check_if_a_number_is_palindrome { public static void main(String[] args) { int num = 121321; System.原创 2014-07-06 03:08:10 · 2639 阅读 · 0 评论 -
用递归翻转一个栈 Reverse a stack using recursion
明确递归语句之前的语句都是顺序执行,而递归语句之后的语句都是逆序执行package recursion;import java.util.Stack;public class Reverse_a_stack_using_recursion { /* Input stack: 3 2 1 Output stack: 1 2 3 */ public s原创 2014-07-06 14:41:08 · 2455 阅读 · 0 评论 -
DP11 高楼扔鸡蛋问题 Egg Dropping Puzzle @geeksforgeeks
package DP;/** * 100层楼,两个鸡蛋。某层之上扔鸡蛋就会碎。问至少要测试多少次才能找出这层楼来 * 我们可以决定怎么扔(min),但必须假设我们的运气最差(max) * * 100层楼,两个鸡蛋。某层之上扔鸡蛋就会碎。问至少要测试多少次才能找出这层楼来?思路:首先要理解清楚题意,本题不是要找在哪一层以上会把鸡蛋扔破!而是我们假设在W层以上会把鸡蛋仍破,现在问原创 2013-12-26 02:18:50 · 1489 阅读 · 0 评论 -
Recursion 字符串的全排列 String Permutation @CareerCup
字符串全排列的题目,还是套用模板,同样要注意ret的size问题会变化。而且与上一题不同的是不光是要在ret后面添加进新的组合,而且还要移除前面用过的组合。类似一个队列。另外Java的substring中区间闭合情况是左闭右开 [ ) 所以想把一个字符串拆成两个区间就可以用这一句:for(int j=0; j<=tmp.length(); j++){ // substring原创 2013-11-27 05:03:11 · 2840 阅读 · 0 评论 -
DP29 最长相同子串 Longest Common Substring @geeksforgeeks
Given two strings ‘X’ and ‘Y’, find the length of the longest common substring. For example, if the given strings are “GeeksforGeeks” and “GeeksQuiz”, the output should be 5 as longest common substrin原创 2013-12-29 03:30:59 · 1881 阅读 · 0 评论 -
递归分解的一些方法 和 回溯 笔记
1 当前处理第一个或最后一个,对其余的递归2 一分为二,对两边做递归3 在一系列选择中做一个选择,对更新的状态做递归原创 2013-11-28 03:03:56 · 2663 阅读 · 0 评论 -
总结帖:全排列Permutation,子集subset 递归模板
两个经典递归模板,以前写过,现在再过一遍!基本思路:如果题目给的输入时数组,首先先要把数组转为ArrayList,因为ArrayList可以很方便地插入,删除,添加!其次,递归函数的形式都一样,一共有3个参数,分别叫ArrayList done, ArrayList rest, ArrayList> ret 。 done存放已经处理过的数据,rest存放还没处理的数据,ret存原创 2014-03-06 05:51:06 · 3575 阅读 · 0 评论 -
Recursion 求所有子集 @CareerCup
这道题可以用递归和迭代两种方法来做。先说一下有收获的地方:在递归中,更经常的采用的是头递归,即调用先递归处理子问题,然后基于子问题的解再处理当前问题!并且这样还能减少stack中保存的内容。当然如果是比较简单的递归,即当前问题不依赖于子问题的解,如前面的那道findMagicIndex问题,就可以用尾递归。还有一点是,因为我在递归中ret值是不断往下传递的,所以原创 2013-11-27 01:53:30 · 2201 阅读 · 1 评论 -
DP7 两道换硬币的问题 Coin Change @geeksforgeeks
1 Given a value N, if we want to make change for N cents, and we have infinite supply of each of S = { S1, S2, .. , Sm} valued coins, how many ways can we make the change? The order of coins doesn’t m原创 2013-12-25 04:38:39 · 2528 阅读 · 0 评论 -
DP10 0-1背包问题 0-1 Knapsack Problem @geeksforgeeks
01背包问题的取和不取实际上就是一个机会成本的问题,如果取了某件东西,尽管当前的价值暂时地增加了,但你付出了机会成本。因为如果不取,留下的空间以后说不定可以放更有价值的东西。因此空间和价值总是一对矛盾。我们的目的是要用有限的空间装入最优价值的东西。Given weights and values of n items, put these items in a knapsack原创 2013-12-25 06:19:48 · 1689 阅读 · 0 评论 -
DP28 求能变成回文的最小插入字符个数 Minimum insertions to form a palindrome @geeksforgeeks
Given a string, find the minimum number of characters to be inserted to convert it to palindrome.Before we go further, let us understand with few examples: ab: Number of insertions required i原创 2013-12-29 02:59:43 · 1670 阅读 · 0 评论 -
DP27 2D矩阵中最大的矩形和 Maximum sum rectangle in a 2D matrix @geeksforgeeks
Given a 2D array, find the maximum sum subarray in it. For example, in the following 2D array, the maximum sum subarray is highlighted with blue rectangle and sum of this subarray is 29.This p原创 2013-12-29 01:46:56 · 2901 阅读 · 0 评论 -
DP30 求骰子能凑成给定和的组合数 Dice Throw @geeksforgeeks
Given n dice each with m faces, numbered from 1 to m, find the number of ways to get sum X. X is the summation of values on each face when all the dice are thrown.The Naive approach is to find all原创 2013-12-29 04:24:27 · 4413 阅读 · 0 评论 -
DP26树的最大独立子集问题 Largest Independent Set Problem @geeksforgeeks
Given a Binary Tree, find size of the Largest Independent Set(LIS) in it. A subset of all tree nodes is an independent set if there is no edge between any two nodes of the subset.For example, consid原创 2013-12-29 00:27:29 · 2325 阅读 · 0 评论 -
两道递归/回溯好题的分析:printSquares,maxSum
回溯的题目总是有套路的,结合《递归分解的一些方法 和 回溯 笔记》一文,基本上可以套用这个模板来解决回溯题目。bool solve(configuration conf){ if(no more choices){ // BASE CASE return (conf is goal state); } for(all avail原创 2013-11-29 12:01:08 · 2954 阅读 · 0 评论 -
Recursion 创新工厂招聘:凑硬币
主要想试一试回溯过程中,有没有使用局部变量的区别!package Recursion;import java.util.ArrayList;/** * 2012创新工场校园招聘的一道编程算法题:有1分,2分,5分,10分四种硬币,每种硬币数量无限,给定n分钱,求有多少种组合可以组合成n分钱? * */public class Coins { public stat原创 2013-12-01 09:08:09 · 1505 阅读 · 0 评论 -
关于动态规划的分类
基础型动态规划(线性动态规划):动态规划最简单的便是入门时的一些基础题,比如LCS, LIS,数字三角形,背包问题,邮局问题,最大子序列和等。这些题也可以衍生出难题,这里的难主要是状态难想,或者想出来的动态规划算法比最佳解答复杂度高。如经典的LCIS,实际上可以用O(N^2)的算法解出来;再如各种优化,比如LIS可以优化到O(NlgN)的时间。 状态压缩动态规划(似乎也叫插转载 2013-10-31 09:09:00 · 3006 阅读 · 0 评论 -
漫谈算法(二) 动态规划 Dynamic Programming
Keywords: Dynamic Programming; Recursive Methods[为什么写这类文章] 漫谈算法(零)序[这系列文章里会用到的一下符号和公式] 漫谈算法(番外篇) 符号标记以及基本数学公式动态规划,Dynamic Programming。这里的programming没有翻译成编程,是因为,这里的programming的意思是指一个t转载 2013-10-31 09:20:39 · 2148 阅读 · 0 评论 -
DP 学习网站总结
U Virgina 的CS 4102 算法视频http://www.youtube.com/channel/UCxXYk53cSZof2bR_Ax0uJYQ?feature=watchDP的面试专题视频http://www.youtube.com/playlist?list=PL962BEE1A26238CA3DP面试专题http://www.geeksforgeeks原创 2013-10-28 03:33:38 · 2079 阅读 · 0 评论 -
DP 求子数组的最大和
输入一个整形数组,数组里有正数也有负数。数组中连续的一个或多个整数组成一个子数组,每个子数组都有一个和。求所有子数组的和的最大值。要求时间复杂度为O(n)。例如输入的数组为1, -2, 3, 10, -4, 7, 2, -5,和最大的子数组为3, 10, -4, 7, 2,因此输出为该子数组的和18。package DP;/*原创 2013-10-31 00:53:55 · 2128 阅读 · 0 评论 -
DP 换硬币问题
设有n种不同面值的硬币,现要用这些面值的硬币来找开待凑钱数m,可以使用的各种面值的硬币个数不限。 找出最少需要的硬币个数,并输出其币值。package DP;import java.util.Arrays;/** * A country has coins with denominations * 1 = d1 < d2 < · · · < dk原创 2013-10-30 23:22:20 · 3150 阅读 · 0 评论