多阶段决策过程(multistep decision process)是指这样一类特殊的活动过程,过程可以按时间顺序分解成若干个相互联系的阶段,在每一个阶段都需要做出决策,全部过程的决策是一个决策序列.动态规划(dynamic programming)算法是解决多阶段决策过程最优化问题的一种常用方法,难度比较大,技巧性也很强.利用动态规划算法,可以优雅而高效地解决很多贪婪算法或分治算法不能解决的问题.动态规划算法的基本思想是:将待求解的问题分解成若干个相互联系的子问题,先求解子问题,然后从这些子…
拿糖果问题 问题描述 妈妈给小B买了N块糖!但是她不允许小B直接吃掉. 假设当前有M块糖,小B每次可以拿P块糖,其中P是M的一个不大于根号下M的质因数.这时,妈妈就会在小B拿了P块糖以后再从糖堆里拿走P块糖.然后小B就可以接着拿糖. 现在小B希望知道最多可以拿多少糖.输入格式 一个整数N输出格式 最多可以拿多少糖样例输入15样例输出6数据规模和约定 N <= 100000 解题思路:这道题关键在于数字P,首先理解数字P,它有三个条件,其一是质数,其二是M的一个因数,其三要小于根号下M.接下来看问…
动态规划算法(Dynamic Programming,简称 DP) 浅谈动态规划 动态规划算法(Dynamic Programming,简称 DP)似乎是一种很高深莫测的算法,你会在一些面试或算法书籍的高级技巧部分看到相关内容,什么状态转移方程,重叠子问题,最优子结构等高大上的词汇也可能让你望而却步. 而且,当你去看用动态规划解决某个问题的代码时,你会觉得这样解决问题竟然如此巧妙,但却难以理解,你可能惊讶于人家是怎么想到这种解法的. 实际上,动态规划是一种常见的「算法设计技巧」,并没有什么高深莫…
一.动态规划(Dynamic Programming) 动态规划方法通常用于求解最优化问题.我们希望找到一个解使其取得最优值,而不是所有最优解,可能有多个解都达到最优值. 二.什么问题适合DP解法 如何判断一个问题是不是DP问题呢?适合DP求解的最优化问题通常具有以下两个特征: 最优子结构 如果一个问题的最优解包含其子问题的最优解,我们就称此问题具有最优子结构性质. 以0-1背包问题(给你一个可装载重量为W的背包和N个物品,每个物品有重量和价值两个属性.其中第i个物品的重量为wt[i],价值为v…
一.基本概念 动态规划过程是:每次决策依赖于当前状态,又随即引起状态的转移.一个决策序列就是在变化的状态中产生出来的,所以,这种多阶段最优化决策解决问题的过程就称为动态规划. 二.基本思想与策略 基本思想与分治法类似,也是将待求解的问题分解为若干个子问题(阶段),按顺序求解子阶段,前一子问题的解,为后一子问题的求解提供了有用的信息.在求解任一子问题时,列出各种可能的局部解,通过决策保留那些有可能达到最优的局部解,丢弃其他局部解.依次解决各子问题,最后一个子问题就是初始问题的解. 由于动态规划解决…
剑指Offer--动态规划算法 什么是动态规划? 和分治法一样,动态规划(dynamic programming)是通过组合子问题而解决整个问题的解. 分治法是将问题划分成一些独立的子问题,递归地求解各子问题,然后合并子问题的解. 动态规划适用于子问题不是独立的情况,也就是各子问题包含公共的子子问题. 此时,分治法会做许多不必要的工作,即重复地求解公共的子问题.动态规划算法对每个子问题只求解一次,将其结果保存起来,从而避免每次遇到各个子问题时重新计算答案. 适用范围 最优性原理体现为问题的最优子…
TSP问题描述: 旅行商问题,即TSP问题(Travelling Salesman Problem)又译为旅行推销员问题.货郎担问题,是数学领域中著名问题之一.假设有一个旅行商人要拜访n个城市,他必须选择所要走的路径,路径的限制是每个城市只能拜访一次,而且最后要回到原来出发的城市.路径的选择目标是要求得的路径路程为所有路径之中的最小值.这篇文章解决的tsp问题的输入描述是: TSP问题的动态规划解法: 引用一下这篇文章,觉得作者把动态规划算法讲的非常明白:https://blog.csdn.ne…
dp动态规划分类详解 转自:http://blog.csdn.NET/cc_again/article/details/25866971 动态规划一直是ACM竞赛中的重点,同时又是难点,因为该算法时间效率高,代码量少,多元性强,主要考察思维能力.建模抽象能力.灵活度. ****************************************************************************************** 动态规划(英语:Dynamic programm…
作为考察范围最广,考察次数最多的算法,当然要开一篇博客来复习啦. 子曰:温故而知新,可以为师矣 我复习DP时有一些自己对DP的理解,也就分享出来吧. ——正片开始—— 动态规划算法,即Dynamic Programming(以下简称为DP),是解决多阶段决策过程最优化问题的高效数学方法.自从1999年IOI出了一道名为"数字三角形"的题后,DP题就在OI竞赛中广为流传.而上面提到的"数字三角形",现在就是DP的一道入门题. 递推和DP的关系: 很多人会混淆递推和DP…
说了要肝的怎么能咕咕咕呢? 不了解DP或者想从基础开始学习DP的请移步上一篇博客:DP动态规划学习笔记 这一篇博客我们将分为上中下三篇(这样就不用咕咕咕了...),上篇是较难一些树形DP,中篇则是数位和状压DP,下篇则是各种DP的优化手段. ——正片开始—— (为啥我最近的博客都喜欢写这个) 背包类树形DP,树形DP里一种很鬼畜的题目. 简单点讲就是:树上的分组背包.不知道分组背包的也请前往上一篇学习. 我们先来看一道板子题:选课 然后我们一起分析一下这道题(最好自己先想一想),由于每门课的先修…