我学我体会(二)

HDOJ-1466计算直线的交点数)

发现:m条直线的交点方案数

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

=m-r*r+r条直线本身的交点方案数(0<=r<m

D:/我的课件/ACM/动态规划lcylecture_04/动态规划(1)_20080317.ppt  2009/7/16

算法总体思想

动态规划算法与分治算法类似,其基本思想也是将待求解问题分解成若干个子问题,但是经过分解得到的子问题往往不是相互独立的。不同子问题的数目常常只有多项式量级。在分治法求解时,有些子问题被重复计算了多次。

如果能够保存已解决的子问题的答案,而在需要时再找出已求的得的答案,就可以避免大量重复计算,从而得到多项式时间算法。2009/7/16

 

数塔问题:

http://acm.pku.edu.cn/JudgeOnline/problem?id=1163

#include <iostream>

using namespace std;

 

int main()

{   int n,a[100][100];

    while(cin>>n)

{

   for(int i=1;i<=n;i++)

        for(int j=1;j<=i;j++)

             cin>>a[i][j];

   for(i=n-1;i>0;i--)

     for(int j=1;j<=i;j++)       if(a[i+1][j]>a[i+1][j+1])a[i][j]+=a[i+1][j];

        else a[i][j]+=a[i+1][j+1];

   cout<<a[1][1]<<endl;

}

    return 0;

}

1:虽然定义的是矩形式的二维数组,但用它来处理(存放)数塔式的数据是可行的,这里用了语句for(i=1;i<=n;i++)

   for(j=1;j<=i;j++)

     cin>>a[i][j];

(浪费了空间)只在“对应位置”存放对应数据,起到了很好的作用;

2:语句:

for(i=n-1;i>0;i--)

  for(j=1;j<i;j++)

       if(a[i+1][j]>a[i+1][j+1])

            a[i][j]+=a[i+1][j];

       else

            a[i][j]+=a[i+1][j+1];

这里存储式的方法是处理动态规划的好方法

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值