欢迎来到天天文库
浏览记录
ID:36840104
大小:710.50 KB
页数:38页
时间:2019-05-10
《acm动态规划入门刘春英》由会员上传分享,免费在线阅读,更多相关内容在教育资源-天天文库。
1、ACM程序设计杭州电子科技大学刘春英acm@hdu.edu.cn9/9/20211今天,你了吗?AC9/9/20212每周一星(3):Lomen9/9/20213第四讲动态规划(1)(Dynamicprogramming)9/9/20214先热身一下——9/9/20215(1466)计算直线的交点数问题描述:平面上有n条直线,且无三线共点,问这些直线能有多少种不同交点数。输入:n(n<=20)输出:每个测试实例对应一行输出,从小到大列出所有相交方案,其中每个数为可能的交点数。样例输入4样例输出034569/9/20216
2、初步分析:我们知道:n条直线互不平行且无三线共点的最多交点数max=1+2+……(n-1)=n(n-1)/2,但本题不这么简单,因为问题问的是:这些直线有多少种不同的交点数?9/9/20217思考2分钟:如何解决?9/9/20218然后,假设<=n-1的情况都已经知道——分析思路——首先,容易列举出N=1,2,3的情况:00,10,2,39/9/20219先来看个统计的方法:假设一共有n=a+b条直线(即n条直线分成2组,分别为a条和b条)则总的交点数=a内的交点数+b内的交点数+a,b之间的交点数重点分析——n的情况:
3、9/9/202110我们来分析加入第N条直线的情况(这里以N=4为例):(分类方法:和第N条直线平行的在a组,其余在b组)1、第四条与其余直线全部平行=>0+4*0+0=0;2、第四条与其中两条平行,交点数为0+(n-1)*1+0=3;3、第四条与其中一条平行,这两条平行直线和另外两点直线的交点数为(n-2)*2=4,而另外两条直线既可能平行也可能相交,因此可能交点数为:0+(n-2)*2+0=4或者0+(n-2)*2+1=54、第四条直线不与任何一条直线平行,交点数为:0+(n-3)*3+0=3或0+(n-3)*3+2
4、=5或0+(n-3)*3+3=6即n=4时,有0个,3个,4个,5个,6个不同交点数。重点分析——n的情况:9/9/202111从上述n=4的分析过程中,我们发现:m条直线的交点方案数=(m-r)条平行线与r条直线交叉的交点数+r条直线本身的交点方案=(m-r)*r+r条之间本身的交点方案数(0<=r5、/9/202114这道题如果用枚举法(暴力思想),在数塔层数稍大的情况下(如31),则需要列举出的路径条数将是一个非常庞大的数目(2^30=1024^3>10^9=10亿)。试想一下:9/9/202115拒绝暴力,倡导和谐~9/9/202116从顶点出发时到底向左走还是向右走应取决于是从左走能取到最大值还是从右走能取到最大值,只要左右两道路径上的最大值求出来了才能作出决策。同样,下一层的走向又要取决于再下一层上的最大值是否已经求出才能决策。这样一层一层推下去,直到倒数第二层时就非常明了。如数字2,只要选择它下面较大值的结6、点19前进就可以了。所以实际求解时,可从底层开始,层层递进,最后得到最大值。结论:自顶向下的分析,自底向上的计算。考虑一下:9/9/202117二、思考题:最长有序子序列I012345678Num[I]1472583699/9/202118解决方案:I012345678Num[I]147258369F[I]1232343459/9/202119三、1160FatMouse'sSpeedSampleInput60081300600021005002000100040001100300060002000800014006007、0120020001900SampleOutput445979/9/202120题目分析:设Mice[i].W表示第i只老鼠的重量,Mice[i].S表示第i只老鼠的速度。我们先对Mice进行排序,以W为第一关键字,从小到大,S为第二关键字,从大到小。设f[i]为Mice[i]至Mice[n]最长的序列长度。考虑某一个f[i],则有:f[i]=max(f[i],f[j]+1)(1<=jMice[j].W,Mice[i].S8、n)。9/9/202121Qestion:两个问题有本质区别吗?9/9/202122思考(期末考试题):SuperJumping!Jumping!Jumping!9/9/202123解题思路?9/9/202124四、1159CommonSubsequenceSampleInputabcfbcabfcabprogram
5、/9/202114这道题如果用枚举法(暴力思想),在数塔层数稍大的情况下(如31),则需要列举出的路径条数将是一个非常庞大的数目(2^30=1024^3>10^9=10亿)。试想一下:9/9/202115拒绝暴力,倡导和谐~9/9/202116从顶点出发时到底向左走还是向右走应取决于是从左走能取到最大值还是从右走能取到最大值,只要左右两道路径上的最大值求出来了才能作出决策。同样,下一层的走向又要取决于再下一层上的最大值是否已经求出才能决策。这样一层一层推下去,直到倒数第二层时就非常明了。如数字2,只要选择它下面较大值的结
6、点19前进就可以了。所以实际求解时,可从底层开始,层层递进,最后得到最大值。结论:自顶向下的分析,自底向上的计算。考虑一下:9/9/202117二、思考题:最长有序子序列I012345678Num[I]1472583699/9/202118解决方案:I012345678Num[I]147258369F[I]1232343459/9/202119三、1160FatMouse'sSpeedSampleInput6008130060002100500200010004000110030006000200080001400600
7、0120020001900SampleOutput445979/9/202120题目分析:设Mice[i].W表示第i只老鼠的重量,Mice[i].S表示第i只老鼠的速度。我们先对Mice进行排序,以W为第一关键字,从小到大,S为第二关键字,从大到小。设f[i]为Mice[i]至Mice[n]最长的序列长度。考虑某一个f[i],则有:f[i]=max(f[i],f[j]+1)(1<=jMice[j].W,Mice[i].S8、n)。9/9/202121Qestion:两个问题有本质区别吗?9/9/202122思考(期末考试题):SuperJumping!Jumping!Jumping!9/9/202123解题思路?9/9/202124四、1159CommonSubsequenceSampleInputabcfbcabfcabprogram
8、n)。9/9/202121Qestion:两个问题有本质区别吗?9/9/202122思考(期末考试题):SuperJumping!Jumping!Jumping!9/9/202123解题思路?9/9/202124四、1159CommonSubsequenceSampleInputabcfbcabfcabprogram
此文档下载收益归作者所有