NOIP普及讲座3-动态规划1
合集下载
相关主题
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
【程序实现】
【例题2】饥饿的牛 问题描述: 牛在饲料槽前排好了队。饲料槽依次用1到N(1<=N<=2000)编号。每 天晚上,一头幸运的牛根据约翰的规则,吃其中一些槽里的饲料。 约翰提供B个区间的清单。一个区间是一对整数startend,1<=start<=end<=N,表示一些连续的饲料槽,比如1-3,7-8,34等等。牛可以任意选择区间,但是牛选择的区间不能有重叠。 当然,牛希望自己能够吃得越多越好。给出一些区间,帮助这只牛找一 些区间,使它能吃到最多的东西。 在上面的例子中,1-3和3-4是重叠的;聪明的牛选择{1-3,7-8},这样可 以吃到5个槽里的东西。
输入 第一行是一个整数N(不超过15),表示导弹数。 第二行包含N个整数,为导弹依次飞来的高度(雷达给出的高 度数据是不大于30000的正整数)。 输出 一个整数,表示最多能拦截的导弹数。 样例输入 8 389 207 155 300 299 170 158 65 样例输出 6
【问题分析】 状态: f[i]代表打下第i颗导弹最多能打多少颗导弹 方程: f[i]=max(f[j])+1(1<=j<i)且第i颗导弹的高度要高于 第j颗导弹的高度
同例题 习题1、最长上升子序列(noi openjudge 1759) 习题2、最大子矩阵(noi openjudge 1768) 习题3、过河
【程序实现】
动态规划
多个规划(决策) 当前最优决策 当前非最优决策
规划方向 初始 阶段
当前 阶段i
目标 阶段 i向着目标阶段不断改变(动态)
当前阶段的决策仅受前一阶段决策的 影响,并决定下一个阶段的决策
求得的一个最优解
动态规划和一般递推的不同点? (1)递推的边界条件一般很明显,而动态规划 的边界条件比较隐蔽,容易被忽视; (2)一般递推的公式比较单一,而动态规划 的状态转移方程具有选择性; (3)一般的递推往往是用来计数或是求一个 值,而动态规划往往是用来求一个最优值。 动态规划和一般递推的相同点? 无后效性和有边界条件。
11
• 【问题分析】 (1)贪心法
• 【问题分析】 (2)搜索:
• 【问题分析】 (3)动态规划:
13 11 12 7 14 7 15 8 26 8 24
6 12
13
11
• (1)阶段:把所给问题的过程,恰当地分 为若干个相互联系的阶段,以便能按一定 的次序去求解。 • (2)状态:状态表示每个阶段开始所处的 自然状况和客观条件,它描述了研究问题 过程中的状况。 • (3)决策:决策表示当过程处于某一阶段 的某个状态时,可以作出不同的决定(或 选择),从而确定下一阶段的状态,这种 决定称为决策。
• (4)策略和最优策略:由所有阶段的决策 组成的决策序列称为全过程策略,简称策 略。 在实际问题中,从决策允许集合中找 出最优效果的策略称为最优策略。 • (5)状态转移方程:状态转移方程是确定 两个相邻阶段状态的演变过程。
• (1)最优化 子问题的局部最优将导致整个问题的全 局最优,即问题具有最优子结构的性质。 也就是说问题的一个最优解中包含着子问 题的一个最优解。 • (2)无后效性 当前阶段中的状态只能由上一个阶段中 的状态转移方程得来,与其他阶段的状态 没有关系,特别是与未发生的阶段状态没 有关系,这就是无后效性。
样例输入 5 1 4 6 8 10 2 5 7 15 17 6 8 9 18 20 10 11 12 19 21 20 23 25 29 33 样例输出 109 提示 样例中,最小值为109=1+2+5+7+9+12+19+21+33。
【问题分析】 状态: f[i,j]代表到达i,j位臵的最低费用 方程: f[i,j]=max(f[i-1,j],f[i,j-1])+a[i,j];
• (1)划分阶段:按照问题的时间或空间特征,把 问题分为若干个阶段; • (2)确定状态和状态变量:将问题发展到各个阶 段时所处的各种情况用不同状态表示出来; • (3)确定决策并写出状态转移方程:一般是根据 相邻两个阶段各状态之间的关系来确定决策; • (4)寻找边界条件:给出的状态转移方程是一个 递推式,必须有一个递推的边界条件; • (5)编写程序。
【程序实现】
【例题5】机器分配 问题描述: 某总公司拥有高效生产设备M台,准备分给下属的N 个分公司。各分 公司若获得这些设备,可以为总公司提供一定的盈利。问:如何分 配这 M 台设备才能使国家得到的盈利最大?求出最大盈利值。 分配原则:每个公司有权获得任意数目的设备,但总台数不得超过总 设备数 M。其中M<=100,N<=100。
【输入格式】 第一行,整数B(1<=B<=1000) 第2到B+1行,每行两个整数,表示一个区间,较小的端点在前面 【输出格式】 仅一个整数,表示最多能吃到多少个槽里的食物。 【样例输入】 3 13 78 34 【样例输出】 5
【问题分析】 状态: f[i]代表吃了第i个区间最多能多少食物 方程: f[i]=max(f[j])+i个区间的长度(1<=j<i)且第i颗区间的 开始时间要大于j的区间的结束时间
【输入格式】 第一行两个整数M、K;(K<=M<=100) 第二行M个整数,第i个整数表示第i本书的页数。 【输出格式】 共1行,复制完所有书最少用的时间(分钟) 【输入样例】 93 123456789 【输出样例】 17
【问题分析】 状态 f[i,j]代笔前 i个人写j本书所需要的最少时间。 方程: f[i,j]= min(max(f[i-1,k],s[j]-s[k])) i-1<=k<=j-1
【输入格式】 第一行为两个整数M,N。接下来是一个N×M的矩阵,其中矩阵的第i 行的第j列的 数 Aij表明第i个公司分配j台机器的盈利。所有数据之间用一个空格分隔。 【输出格式】 只有一个数据,为总公司分配这M台设备所获得的最大盈利。 【样例输入】 32 123 234 【样例输出】 4
【问题分析】 状态: f[i,j]代表前i个公司分配到j台设备所能获得的最大盈利 方程 f[i,j]=max(f[i-1,j-k]+a[i,k]) 0<=k<=j
【输入格式】 第一行N,表示A,B的长度。 第二行,串A。 第三行,串B。 【输出格式】 输出长度 【样例输入】 4 2213 2123 【样例输出】 2 【数据范围及提示】 1<=N<=3000,A,B中的数字不超过maxlongint
【问题分析】
状态 f[i,j]代表a字符串到i,b字符串到j的最长公共字串 方程: a[i]=a[j] 则 f[i,j]=f[i-1,j-1]+1; a[i]不等于a[j] 则f[i,j]=max(f[i-1,j],f[i,j-1])
从搜索到动态规划
引例(数塔问题)
• 设有一个三角形的数塔,顶点为根结点,每个结 点有一个整数值。从顶点出发,可以向左走或向 右走,从根结点13出发向左、向右的路径长度可 以是: 13 13-11-7-14-7,其和为52 11 8 13-11-12-14-13,其和为63 • 若要求从根结点开始, 26 7 12 请找出一条路径,使 8 15 6 14 路径之和最大,输出路 24 7 13 径的长度。 12
【程序实现】
【程序实现】
【例题4】最低通行费用(noi openjudge 7614) 问题描述: 一个商人穿过一个 N*N 的正方形的网格,去参加一个非常重要的商务活 动。他要从网格的左上角进,右下角出。每穿越中间1个小方格,都要 花费1个单位时间。商人必须在(2N-1)个单位时间穿越出去。而在经过 中间的每个小方格时,都需要缴纳一定的费用。这个商人期望在规定时 间内用最少费用穿越出去。请问至少需要多少费用?注意:不能对角穿 越各个小方格(即,只能向上下左右四个方向移动且不能离开网格)。 输入 第一行是一个整数,表示正方形的宽度N (1 <= N < 100); 后面 N 行,每行 N 个不大于 100 的整数,为网格上每个小方格的费用。 输出 至少需要的费用.
【例题3】最长公共子序列(codevs1408) 问题描述: 熊大妈的奶牛在小沐沐的熏陶下开始研究信息题目。小沐沐先让奶牛研 究了最长上升子序列,再让他们研究了最长公共子序列,现在又让他 们要研究最长公共上升子序列了。 小沐沐说,对于两个串A,B,如果它们都包含一段位臵不一定连续的数 字,且数字是严格递增的,那么称这一段数字是两个串的公共上升子 串,而所有的公共上升子串中最长的就是最长公共上升子串了。 奶牛半懂不懂,小沐沐要你来告诉奶牛什么是最长公共上升子串。不过 ,只要告诉奶牛它的长度就可以了。
Байду номын сангаас
【例题1】拦截导弹(noi openjudge 8780) 问题描述: 某国为了防御敌国的导弹袭击,发展出一种导弹拦截系统。但 是这种导弹拦截系统有一个缺陷:虽然它的第一发炮弹能 够到达任意的高度,但是以后每一发炮弹都不能高于前一 发的高度。某天,雷达捕捉到敌国的导弹来袭。由于该系 统还在试用阶段,所以只有一套系统,因此有可能不能拦 截所有的导弹。 输入导弹依次飞来的高度(雷达给出的高度数据是不大于 30000的正整数),计算这套系统最多能拦截多少导弹。
【程序实现】
【例题6】复制书稿 问题描述: 有M本书(编号为1,2,…,M),每本书都有一个页数 (分别是P1,P2,…,PM)。想将每本都复制一份。将 这M本书分给K个抄写员(1<=K<=M<=500),每本书 只能分配给一个抄写员进行复制。每个抄写员至少被分 配到一本书,而且被分配到的书必须是连续顺序的。复 制工作是同时开始进行的,并且每个抄写员复制一页书 的速度都是一样的。所以,复制完所有书稿所需时间取 决于分配得到最多工作的那个抄写员的复制时间。试找 一个最优分配方案,使分配给每一个抄写员的页数的最 大值尽可能小。(假设复制一页需要1分钟)