动态规划入门 HDU 1466-计算直线的交点数

来源:互联网 发布:河北大学网络教育 编辑:程序博客网 时间:2024/06/04 20:26

题目链接:

http://acm.hdu.edu.cn/showproblem.php?pid=1466

思路分析:

这道题是LCY老师课件上的热身题,我想了好久都没弄明白,直到看了别人的题解,之前一直在找第i条直线与第i-1条直线的关系。主要是方案数的存储没有搞明白,没有想到利用交点数去存储不同的情况,这种做法还有一个好处,可以自动去重。

状态转移的关键是:第i条直线与r条自由直线相交时,交点数=平行线条数*自由直线条数+r条自由直线本身的焦点数=(i-r)*r+k。同时可以从这个递推式发现问题分解后的子问题就是n条直线的交点个数的所有可能情况。找到状态转移方程之后,考虑如何存储,一开始想的是用dp[i][r]存,其实这样计算出来的是与r条自由直线相交的所有可能情况焦点数之和。而大家采用的方法是用dp[i][k](i条直线相交是否拥有k个交点的可能性)。

关于递推式的推导:(以下推导内容摘自LCY老师课件)

容易列举出N=1,2,3的情况:
0
0,1
0,2,3
如果已知<N的情况,我们来分析加入第N条直线的情况(这里N=4):
1、第四条与其余直线全部平行 => 无交点;
2、第四条与其中两条平行,交点数为(n-1)*1+0=3;
3、第四条与其中一条平行,这两条平行直线和另外两点直线的交点数为(n-2)*2=4,而另外两条直线既可能平行也可能相交,因此可能交点数为:
                   (n-2)*2+0=4    或者         (n-2)*2+1=5     
4、 第四条直线不与任何一条直线平行,交点数为:
      (n-3)*3+0=3   或者 (n-3)*3+2=5    或者 (n-3)*3+3=6
即n=4时,有0个,3个,4个,5个,6个不同交点数。

代码实现:

#include"cstdio"using namespace std;int dp[22][193]={0};//数组初始化为0int main(){    int n,num;    for(int i=0;i<=20;i++)//不管有几条直线,只要全部平行,0个交点的方案就存在        dp[i][0]=1;    for(int i=1;i<=20;i++)//题目要求最大求到20,i代表共有i条直线    {        for(int r=0;r<=i;r++)//i与r条自由直线相交,r条直线可能相交也可能不相交        {            num=r*(r-1)/2;//r条直线最多有num个交点            for(int k=0;k<=num;k++)            {                if(dp[r][k])//i-r条直线与r条直线相交交点个数=(i-r)*r+k(k为r条直线相交交点个数可能值)                    dp[i][(i-r)*r+k]=1;            }        }    }    while(~scanf("%d",&n))    {        num=n*(n-1)/2;        printf("0");        for(int i=1;i<=num;i++)        {            if(dp[n][i])                printf(" %d",i);            }        printf("\n");    }}


0 0
原创粉丝点击
热门问题 老师的惩罚 人脸识别 我在镇武司摸鱼那些年 重生之率土为王 我在大康的咸鱼生活 盘龙之生命进化 天生仙种 凡人之先天五行 春回大明朝 姑娘不必设防,我是瞎子 手机不记得密码了怎么办 手机不记得开锁密码怎么办 oppo手机不记得密码怎么办 电脑密码不记得了怎么办 vivo手机不记得密码了怎么办 运管把车扣了怎么办 大学通选课挂科怎么办 通识必修课挂了怎么办 我想开3d艺术馆怎么办 档案回原籍报到证怎么办 服刑的人孩子上学怎么办 长沙终身教育网用户名忘记了怎么办 乡下卖服装没生意怎么办 没能力没学历该怎么办 没有学历的我该怎么办 补过的牙掉了怎么办 法院判完被告不给钱怎么办 b证到期未继续教育怎么办 宝宝上幼儿园中午要用尿不湿怎么办 嫁到北京农村怎么办居住证 2020年没脱贫的农民怎么办 2020年农民的土地怎么办 车停在停车场被划怎么办 专升本差两分怎么办 入职需要学士学位证怎么办 不喜欢写科研项目又没编制怎么办 易学堂密码忘了怎么办 易班手机号换了怎么办 易班登录不上怎么办 易到手机号换了怎么办 海外留学没有教育部认证怎么办 七过月宝宝便秘怎么办 6个月孩子便秘怎么办 6个月婴儿便秘怎么办 一个多月宝宝两天没拉大便怎么办 7个月宝宝便秘怎么办 9个月宝宝便秘怎么办 六个月宝宝严重便秘怎么办 公司调岗员工不同意怎么办 acca注册一直在审核怎么办 ieee ap二审被拒怎么办