几道动态规划

1. 给一个浮点数序列,取最大乘积连续子串的值,例如 -2.5,4,0,3,0.5,8,-1,则取出的最大乘积连续子串为3,0.5,8。

2. 给定一个长度为N的整数数组,只允许用乘法,不能用除法,计算任意(N-1)个数的组合中乘积最大的一组,并写出算法的时间复杂度。

3. 给定一个数组a[N],我们希望构造数组b[N],其中b[i]=a[0]*a[1]*...*a[N-1]/a[i]。 在构造过程:不允许使用除法; 要求:O(1)空间复杂度和O(n)时间复杂度; 除遍历计数器与a[N] b[N]外,不可使用新的变量(包括栈临时变量、对空间和全局静态变量等); 请用程序实现并简单描述。

时间: 2024-12-16 07:33:38

几道动态规划的相关文章

100道动态规划前言《卖油翁》

陈康肃公尧咨善射,当世无双 ,公亦以此自矜.尝射于家圃,有卖油翁释担而立,睨之,久而不去.见其发矢十中八九,但微颔之.  康肃问曰:“汝亦知射乎?吾射不亦精乎?”翁曰:“无他, 但手熟尔.”康肃忿然曰:“尔安敢轻吾射?”翁曰:“以我酌油知之.”乃取一葫芦置于地,以钱覆其口,徐以杓酌油沥之,自钱孔入,而钱不湿.因曰:“我亦无他, 惟手熟尔.”康肃笑而遣之. 此与庄生所谓解牛斫轮者何异? 坚持不下去的时候,就回头读一遍卖油翁,体会一下,自己和大神的区别的根本原因是什么.

计蒜客 跳跃游戏二(动态规划)

给定一个非负整数数组,假定你的初始位置为数组第一个下标. 数组中的每个元素代表你在那个位置能够跳跃的最大长度. 你的目标是到达最后一个下标,并且使用最少的跳跃次数. 例如: A = [2,3,1,1,4], 到达最后一个下标的最少跳跃次数为2.(先跳跃1步,从下标0到1,然后跳跃3步,到达最后一个下标.一共两次) 格式: 第一行输入一个正整数n,接下来的一行,输入数组A[n]. 最后输出最少的跳跃次数. 样例1 输入: 5 3 1 1 1 1 输出: 2 #include <stdio.h>

动态规划多种题型

数字三角形 数塔 Problem Description 在讲述DP算法的时候,一个经典的例子就是数塔问题,它是这样描述的: 有如下所示的数塔,要求从顶层走到底层,若每一步只能走到相邻的结点,则经过的结点的数字之和最大是多少?已经告诉你了,这是个DP的题目,你能AC吗? Input 输入数据首先包括一个整数C,表示测试实例的个数,每个测试实例的第一行是一个整数N(1 <= N <= 100),表示数塔的高度,接下来用N行数字表示数塔,其中第i行有个i个整数,且所有的整数均在区间[0,99]内.

【干货】动态规划十问十答

问1:动态规划是个什么鸟蛋? 答:动态规划是一种通过"大而化小"的思路解决问题的算法.区别于一些固定形式的算法,如二分法,宽度优先搜索法,动态规划没有实际的步骤来规定第一步做什么第二步做什么.所以更加确切的说,动态规划是一种解决问题的思想.这种思想的本质是,一个规模比较大的问题(假如用2-3个参数可以表示),是通过规模比较小的若干问题的结果来得到的(通过取最大,取最小,或者加起来之类的运算)所以我们经常看到的动态规划的核心--状态转移方程都长成这样: * f[i][j] = f[i -

动态规划(1)

今天放两道动态规划的题,本人心得是:认真寻找规律 第一题 多重部分和问题 有n种不同大小数字ai,每种个mi个.判断是否可以从这些数字之中选出若干使它们的和恰好为k.(1≤n≤100,1≤ai,mi≤100000,1≤k≤100000) 样例输入 3                           n 3  5  8                   a1   a2  ... 3  2  2                   m1  m2 ... 17                  

转:动态规划

终于来到了算法设计思想中最有趣的这部分,在去年的google笔试中,7道算法设计题有2道动态规划(Dynamic Programming). 看了这么久的算法,这部分也是唯一感觉到了比较难的地方, 从这篇文章开始,将花连续的篇幅来讨论一些对动态规划的认识和其中的问题.这包括一些例子:计算二项式系数,Warshall算法求传递闭包,Floyd算法求完全最短路径,构造最 有二叉查找树,背包问题和记忆功能.也包括一些其他问题的解题报告(动态规划确实很难,对这一章的内容,我将搜索一些其他类型的问题来写解

完全背包问题

完全背包问题 题目 有N种物品和一个容量为V的背包,每种物品都有无限件可用.第i种物品的费用是c[i],价值是w[i].求解将哪些物品装入背包可使这些物品的费用总和不超过背包容量,且价值总和最大. 基本思路 这个问题非常类似于01背包问题,所 不同的是每种物品有无限件.也就是从每种物品的角度考虑,与它相关的策略已并非取或不取两种,而是有取0件.取1件.取2件--等很多种.如果仍然按照解 01背包时的思路,令f[i][v]表示前i种物品恰放入一个容量为v的背包的最大权值.仍然可以按照每种物品不同的

【BZOJ1010】【HNOI2008】玩具装箱toy 动规_斜率优化

第一道斜率优化题,题解仍然不是很透彻. 我在这里可以推荐一篇博客. http://blog.sina.com.cn/s/blog_5f5353cc0100jx41.html 写得还好,但是可能有一些地方仍说的不是很明白. 我说一下我对斜率优化的理解: 就是发现某道动态规划的题会TLE,然后它又恰巧符合某些丧心病狂的性质时的一种优化. 本质是有限度地捏造出一种性质,使得动规方程满足某种邪恶的单调性,从而得到大幅度的优化. 而这个单调性是怎么得到的呢? 就是我们把原转移状态搞出来,一顿转化,比如把平

最大子数列之和问题

给定一个数组,数组长度为n,数组中每个元素为一个整数(其中有正数,负数,零),求一和最大的子数组 这是一道老生常谈的动态规划问题,也是我大一学算法时遇到的第一道动态规划问题,当时觉得解法非常精妙,从此爱上了算法. 题目的具体解法为是dp[i][0]表示前i项数列不含最后一项(第i项)时的子数列之和的最大值,dp[i][1]表示前i项数列含最后一项的子数列之和最大值 很明显dp[i][0]=max(dp[i-1][1],dp[i-1][1]),dp[i][1]=max(dp[i-1][1]+a[i