| 网站首页 | 业界新闻 | 小组 | 威客 | 人才 | 下载频道 | 博客 | 代码贴 | 在线编程 | 编程论坛
欢迎加入我们,一同切磋技术
用户名:   
 
密 码:  
共有 453 人关注过本帖, 1 人收藏
标题:递推题,哪错了??
只看楼主 加入收藏
cb_1212
Rank: 1
等 级:新手上路
帖 子:126
专家分:5
注 册:2011-4-28
结帖率:66.67%
收藏(1)
已结贴  问题点数:10 回复次数:4 
递推题,哪错了??
A(m,n)= n+1  (m=0)
A(m,n)= A(m-1,1)   ( m>0,n=0)
A(m,n)= A(m-1,A(m,n-1))    (m>0,n>0)
输入
输入包含多组测试数据,每组测试数据包含两个整数:m  (0 < m <= 3)和 n ( 0 <= n <= 1000000)
输出
  对应每组测试数据,输出相应的A(m,n);
样例输入
1 3
2 4
样例输出
5
11
提示
要注意的是,当m等于3时,n最大为24。




程序代码:
#include<cstdio>

__int64 a[3][1000000];
int main()
{
    int i,j,m,n;
    while(scanf("%d%d",&m,&n)!=EOF)
    {
        for(i=0;i<=n;++i)
            a[0][i] = i + 1;
        a[1][0] = 2;
        a[2][0] = 3;
        a[3][0] = 5;
        for(i=1;i<=m;++i)
            for(j=1;j<=n;++j)
                a[i][j] = a[i-1][a[i][j-1]];
        printf("%I64d\n",a[m][n]);    
    }
    return 0;
}


哪错了?

[ 本帖最后由 cb_1212 于 2011-12-21 22:21 编辑 ]
搜索更多相关主题的帖子: 测试 
2011-12-21 22:12
beyondyf
Rank: 19Rank: 19Rank: 19Rank: 19Rank: 19Rank: 19
等 级:贵宾
威 望:103
帖 子:3282
专家分:12654
注 册:2008-1-21
收藏
得分:10 
你的数组越界了。应该声明为a[4][1000001]。光数据空间就需要32M,我很担心题目要求的空间够不够。

这是一个双递归函数。在m维的不同值时A变为单递归函数,随着m值的增大,函数的导数在显著增大,所以题目只要求m到3。

推导过程很简单,但建议你自己试试,这里直接告诉结论。

A(0, n) = n + 1
A(1, n) = n + 2
A(2, n) = 2 * n + 3
A(3, n) = (1 << (n + 3)) - 3

重剑无锋,大巧不工
2011-12-21 23:02
cb_1212
Rank: 1
等 级:新手上路
帖 子:126
专家分:5
注 册:2011-4-28
收藏
得分:0 
回复 2楼 beyondyf
唉 现在才发现我好幼稚
算法还一点都没学,DP模拟什么的都不会,期待下学期的数据结构课。。。。。。。。已经AC,谢了!!唉 现在才发现我好幼稚
算法还一点都没学,DP模拟什么的都不会,期待下学期的数据结构课。。。。。。。。已经AC,谢了!!

[ 本帖最后由 cb_1212 于 2011-12-21 23:28 编辑 ]
2011-12-21 23:27
beyondyf
Rank: 19Rank: 19Rank: 19Rank: 19Rank: 19Rank: 19
等 级:贵宾
威 望:103
帖 子:3282
专家分:12654
注 册:2008-1-21
收藏
得分:0 
得意时不要忘乎所以,受挫折时也不必妄自菲薄。正确地看清自己的位置就好。

重剑无锋,大巧不工
2011-12-22 00:09
cb_1212
Rank: 1
等 级:新手上路
帖 子:126
专家分:5
注 册:2011-4-28
收藏
得分:0 
其实根本不必用数组。晕,我都不知道怎么一开始就开数组了。。。
程序代码:
#include<cstdio>

int main()
{
    int res,m,n;
    while(scanf("%d%d",&m,&n)!=EOF)
    {
            
            if(m==0)
                res = n + 1;
             if(m==1)
                res = n + 2;
            if(m==2)
                res = 2 * n + 3;
            if(m==3)
                res = (1<<(n+3)) - 3; 
        printf("%d\n",res);    
    }
    return 0;
}
2011-12-22 16:27
快速回复:递推题,哪错了??
数据加载中...
 
   



关于我们 | 广告合作 | 编程中国 | 清除Cookies | TOP | 手机版

编程中国 版权所有,并保留所有权利。
Powered by Discuz, Processed in 0.055544 second(s), 7 queries.
Copyright©2004-2024, BCCN.NET, All Rights Reserved