
动态规划
xiaxzhou
这个作者很懒,什么都没留下…
展开
-
【算法题】双核处理
一种双核CPU的两个核能够同时的处理任务原创 2017-05-26 20:43:59 · 1199 阅读 · 0 评论 -
【算法题】买糖果
买糖果某糖果公司专门生产儿童糖果,它最受儿童欢迎的糖果有A1、A2两个序列,均采用盒式包装。包装好的A1类糖果体积为一个存储单位,而包装好的A2类糖果体积正好是A1类的两倍。这两类糖果之所以广受儿童欢迎,是因为糖果中含有公司独家研发的魔幻因子。A1或A2序列中的糖果,看起来包装可能是一样的,但因为其中的魔幻因子含量不同被细分为不同的产品。临近传统节日,公司的糖果供不应求。作为一个精明的糖果分销商,小原创 2017-06-23 15:44:21 · 1785 阅读 · 0 评论 -
【剑指offer】题43:n个骰子的点数
动态规划 使用dp[k][i]表示k个骰子时,点数和为i的组合数 则转移状态方程: dp[k][i]=∑j=16dp[k−1][i−j]dp[k][i]=\sum_{j=1}^6{dp[k-1][i-j]}void func(int n){ if (n < 1) { return; } vector<int> vec(n*6+1); v原创 2017-07-05 12:02:15 · 280 阅读 · 0 评论 -
【算法题】预定酒店
题目描述 你要出去旅游,有N元的预算住酒店,有M家酒店供你挑选,这些酒店都有价格X。 需要你正好花完这N元住酒店(不能多,也不能少)最少能住几晚?返回最少住的天数,没有匹配的返回-1 比如你有1000元,所有酒店都是大于1000的,则返回-1 比如你有1000元,有1家1000元的,有1家300,有1家700原创 2017-06-27 10:10:08 · 2502 阅读 · 0 评论 -
【算法题】最长公共子序列
dp[i][j]=min⎧⎩⎨⎪⎪⎪⎪⎪⎪⎪⎪⎪⎪dp[i−1][j]dp[i][j−1]dp[i−1][j−1]+1if: str[i]==str[j] dp[i][j]=min\begin{cases}dp[i-1][j] & \\\\dp[i][j-1] & \\\\dp[i-1][j-1] +1 & \text{if: str[i]==str[j] }\end{cases}#原创 2017-06-30 20:01:08 · 419 阅读 · 0 评论 -
【算法题】逃离农场
状态转移方程:使用dp[i][j][t]表示前ii头奶牛中选取j头的和除以nn余为tt的方案数则方案分为两种:选取了第ii头奶牛和没有选取第ii头奶牛两个子问题 没有选择第ii头奶牛的方案数: dp[i−1][j][t]dp[i-1][j][t] 选择第ii头奶牛的方案数: dp[i−1][j−1][((t+n)−j)dp[i-1][j-1][((t+n)-j)%n]dp[原创 2017-06-17 15:49:06 · 2255 阅读 · 0 评论 -
【算法题】2018今日头条编程题二
使用dp[i,j]表示区间【i,j】能得到计算值的最大值k表示区间【i,j】的最小值min的下标索引则序列结构可表示如下: 【i,k-1】【min】【k+1,j】【i,j】所有子区间分为两种情况:包含min、不包含min在所有包含min的子区间【m,n】中,计算值:min∗sum[m,n]<=min∗sum[i,j]min*sum[m,n] <= min*sum[i,j]所以: dp[i,j]=原创 2017-08-23 10:56:04 · 870 阅读 · 0 评论 -
【算法题】编程测试:射击场
在某射击场有N个靶,每个靶上都有一个分数,存在score数组中,击中第i个靶的得分为score[left]*score[i]*score[right],同时原left和right两个靶变为相邻的靶,其中得分为0的靶是不能射击的,当left不存在或者不能射击时,得分为score[i]*score[right],同理,right也遵循此规则,当left和right都不存在或者都不能射击时,得分为scor原创 2017-08-17 10:50:38 · 1462 阅读 · 0 评论 -
【算法题】博弈论:leetcode 486 数组取数
参见【题目】:给定一个正整数数组,选手1从数组的头部或者尾部选择一个数,选手2从剩下部分的头部或尾部选择一个数,循环往复,直到该数组中的数都被取完。选手1、2都足够聪明。判断选手1取的数的和值是否大于选手2.【思路】:dp[i][j]dp[i][j]表示原数组中从i到j的这么多数中,按照游戏规则,某个玩家所能获得的最大分数。 dp[i][j]=max(sum[i][j]−dp[i+1][j],原创 2017-09-15 11:28:55 · 1968 阅读 · 0 评论 -
【算法题】博弈论:数组选数字
给定一个数组,两个人A、B依次从数组最左端选择一个或者两个数字,最后选择的数字之和较大者赢。假设两个人都足够聪明,A先选,给定数组,判断A、B谁能赢。分析: dp[i]表示当前数组为Array[i]…Array[n]时,当前选择的人最多能从数组中选出多少值。则dp[i]=max⎧⎩⎨sum[i]−dp[i+1]sum[i]−dp[i+2]dp[i] = max\begin{cases}sum[i原创 2017-09-15 15:33:26 · 2078 阅读 · 0 评论 -
【算法题】最长回文子串
方法1:暴力判断所有子串:用两个for循环找出所有子串,第三个for循环用于判断该子串是否为回文,是回文则且比已找到的回文串长就替换,算法时间效率为O(n^3)方法2:中心扩展法:遍历每个字符,以此为中心,往两边拓展,需要分为奇数回文和偶数回文两种情况:abcba 、abba。算法时间效率为O(n^2)#include <iostream>#include <vector>#include原创 2017-05-31 16:06:54 · 313 阅读 · 0 评论 -
【算法题】寻找最少完全平方数
最少完全平方数 、 动态规划、最短路径原创 2017-05-25 18:39:10 · 2968 阅读 · 3 评论 -
【算法题】找硬币
动态规划: dp[i]dp[i]表示指定金额为i时的最少硬币数,array[n]为硬币面额。状态方程为: dp[i]=min⎧⎩⎨⎪⎪⎪⎪⎪⎪⎪⎪⎪⎪dp[i−array[1]]+1...dp[i−array[k]+1]...dp[i−array[n]+1]dp[i]=min\begin{cases}dp[i-array[1]]+1\\...\\dp[i-array[k]+1]\\...\原创 2017-06-22 10:14:42 · 745 阅读 · 0 评论 -
【算法题】创造新世界
众所周知计算机代码底层计算都是0和1的计算,牛牛知道这点之后就想使用0和1创造一个新世界!牛牛现在手里有n个0和m个1,给出牛牛可以创造的x种物品,每种物品都由一个01串表示。牛牛想知道当前手中的0和1可以最多创造出多少种物品。 输入描述: 输入数据包括x+1行: 第一行包括三个整数x(2 ≤ x ≤ 20),n(0 ≤ n ≤ 500),m(0 ≤ m ≤ 500),以空格分隔原创 2017-06-20 15:19:05 · 677 阅读 · 0 评论 -
【算法题】最长回文子序列
给定一个字符串s,你可以从中删除一些字符,使得剩下的串是一个回文串。如何删除才能使得回文串最长呢? 输出需要删除的字符个数。 输入描述: 输入数据有多组,每组包含一个字符串s,且保证:1<=s.length<=1000. 输出描述: 对于每组数据,输出一个整数,代表最少需要删除的字符个数。 输入例子: abcda google 输原创 2017-05-31 14:30:37 · 419 阅读 · 0 评论 -
【算法题】跳石板
小易来到了一条石板路前,每块石板上从1挨着编号为:1、2、3……. 这条石板路要根据特殊的规则才能前进:对于小易当前所在的编号为K的 石板,小易单次只能往前跳K的一个约数(不含1和K)步,即跳到K+X(X为K的一个非1和本身的约数)的位置。 小易当前处在编号为N的石板,他想跳到编号恰好为M的石板去,小易想知道最少需要跳跃几次可以到达。 例如: N = 4,M = 24: 4-原创 2017-06-01 19:47:30 · 541 阅读 · 0 评论 -
【算法题】买苹果
小易去附近的商店买苹果,奸诈的商贩使用了捆绑交易,只提供6个每袋和8个每袋的包装(包装不可拆分)。 可是小易现在只想购买恰好n个苹果,小易想购买尽量少的袋数方便携带。如果不能购买恰好n个苹果,小易将不会购买。 输入描述: 输入一个整数n,表示小易想购买n(1 ≤ n ≤ 100)个苹果 输出描述: 输出一个整数表示最少需要购买的袋数,如果不能买恰好n个苹果则输出-1原创 2017-06-01 20:45:55 · 1227 阅读 · 0 评论 -
【算法题】不等式数列
度度熊最近对全排列特别感兴趣,对于1到n的一个排列,度度熊发现可以在中间根据大小关系插入合适的大于和小于符号(即 ‘>’ 和 ‘<’ )使其成为一个合法的不等式数列。但是现在度度熊手中只有k个小于符号即(‘<”)和n-k-1个大于符号(即’>’),度度熊想知道对于1至n任意的排列中有多少个排列可以使用这些符号使其为合法的不等式数列。 输入描述: 输入包括一行,包含两个整数n和k(k原创 2017-06-03 12:06:54 · 769 阅读 · 0 评论 -
【算法题】合唱团
有 n 个学生站成一排,每个学生有一个能力值,牛牛想从这 n 个学生中按照顺序选取 k 名学生,要求相邻两个学生的位置编号的差不超过 d,使得这 k 个学生的能力值的乘积最大,你能返回最大的乘积吗? 输入描述: 每个输入包含 1 个测试用例。每个测试数据的第一行包含一个整数 n (1 <= n <= 50),表示学生的个数,接下来的一行,包含 n 个整数,按顺序表示每个学生的能力值原创 2017-06-08 16:03:39 · 1417 阅读 · 1 评论 -
【算法题】砌砖块
小易有n块砖块,每一块砖块有一个高度。小易希望利用这些砖块堆砌两座相同高度的塔。为了让问题简单,砖块堆砌就是简单的高度相加,某一块砖只能使用在一座塔中一次。小易现在让能够堆砌出来的两座塔的高度尽量高,小易能否完成呢。 输入描述: 输入包括两行: 第一行为整数n(1 ≤ n ≤ 50),即一共有n块砖块 第二行为n个整数,表示每一块砖块的高度height[i] (1 ≤ he原创 2017-05-27 16:04:22 · 3126 阅读 · 0 评论 -
【算法题】庆祝61
牛家庄幼儿园为庆祝61儿童节举办庆祝活动,庆祝活动中有一个节目是小朋友们围成一个圆圈跳舞。牛老师挑选出n个小朋友参与跳舞节目,已知每个小朋友的身高h_i。为了让舞蹈看起来和谐,牛老师需要让跳舞的圆圈队形中相邻小朋友的身高差的最大值最小,牛老师犯了难,希望你能帮帮他。 如样例所示: 当圆圈队伍按照100,98,103,105顺时针排列的时候最大身高差为5,其他排列不会得到更优的解原创 2017-06-19 20:59:21 · 1191 阅读 · 0 评论 -
【算法题】随机的机器人
随机的机器人分析:概率期望问题感觉没法下手,不知道动态规划还能这么玩dp[i][j][k]dp[i][j][k]表示走了ii步后,纸带上有jj个红色格子时,机器人位于第kk个红色格子上的概率 dp[0][1][1]=1dp[0][1][1] = 1 则dp[i][j][k]的概率会转移到dp[i+1][][]的两个位置上:机器人位于最左边红格子: dp[i][j][1]/2dp[i][j][1原创 2017-06-17 18:36:56 · 1580 阅读 · 0 评论 -
【算法题】最长公共子串
牛牛有两个字符串(可能包含空格),牛牛想找出其中最长的公共连续子串,希望你能帮助他,并输出其长度。 输入描述: 输入为两行字符串(可能包含空格),长度均小于等于50. 输出描述: 输出为一个整数,表示最长公共连续子串的长度。 输入例子: abcde abgde 输出例子: 2动态规划:使用dp[i][j]dp[i][j]表示以原创 2017-06-20 14:56:50 · 603 阅读 · 0 评论 -
【算法题】组装三角形
牛牛手里有N根木棒,分别编号为1~N,现在他从N根里想取出三根木棒,使得三根木棒构成一个三角形,你能计算出牛牛有多少种取法吗?(考虑两种取法中使用的木棒编号有一个不一样就认为是不同的取法)。 输入描述: 首先输入一个正整数N,接下来的一行共有N个正整数表示每个木棒的长度。 N ≤ 50, 木棒的长度 ≤ 10000. 输出描述: 输出一个整数表示方法数。 输入例子原创 2017-06-20 15:02:41 · 1957 阅读 · 0 评论 -
【算法题】神奇数
东东在一本古籍上看到有一种神奇数,如果能够将一个数的数字分成两组,其中一组数字的和等于另外一组数字的和,我们就将这个数称为神奇数。例如242就是神奇数,我们能够将这个数字分成两组,分别是{2,2}以及{4},给定区间[l,r],统计这个区间有多少个神奇数,请你来帮助他。首先判断数组能否被平分,即数组分割问题,dp[i][j]dp[i][j]表示数组前 ii 个数字能否求和得到 jj 则dp[i][j原创 2017-09-09 09:58:06 · 2272 阅读 · 0 评论