HDOJ_1466:n条直线交点数 解题报告

本文通过分析HDOJ_1466题目的解题过程,探讨了动态规划的解题步骤,包括找到初始条件、建立递推关系以及输出答案。以n条直线的交点数为例,详细解释了如何利用动态规划求解问题,并提供了具体的代码实现。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

关于动态规划,除了ppt里讲到的把子问题的结果保存起来甭管后面是否用到这个显著特点外,根据我目前粗浅的认识,觉得其解题步骤可以细化为以下几步:

1. 根据题设找到或求出初始条件

    具体如HDOJ_1466求直线交点数这题,设bool p[21][191](最多输入20条直线,对应最多190个交点),当p[i][j]==true时表示i条直线可以有j个交点。(最多输入20条直线,对应最多190个交点)那么p[i][0]==true;是肯定成立的,即全部直线都平行时交点为0。当然p[i][i-1]==true和p[i][2*i-4]==true等也是成立的,不过它们不是向后推倒的必要初始条件,即有p[i][j]==true就足够了。

2. 【核心】找出递推关系,推得全部子问题的答案

    递推方向一般是由简向繁、自底向上。再比如上述的直线交点题:

    m条直线的交点方案数
= (m-r)条平行线与r条直线交叉的交点数 + r条直线本身的交点方案
= (m-r)*r + r条之间本身的交点方案数

    即p[j][k]→p[i][(i-j)*j+k],或者便于理解的形式:p[m+△x][n]→p[m+△x][m*△x+n],其中△x是增加的平行直线数,它们会和原来的m条直线交出m*△x个新交点,再加上原本的n个交点即可。虽然是二维数组,但存在三个变量,故处理时是三重for循环。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值