标题:将军鬼上身
只看楼主
邓士林
Rank: 19Rank: 19Rank: 19Rank: 19Rank: 19Rank: 19
来 自:淮河河畔
等 级:贵宾
威 望:61
帖 子:2391
专家分:13384
注 册:2013-3-3
得分:0 
佩服啊!好厉害!动态规划

Maybe
2013-05-25 16:46
beyondyf
Rank: 19Rank: 19Rank: 19Rank: 19Rank: 19Rank: 19
等 级:贵宾
威 望:103
帖 子:3282
专家分:12654
注 册:2008-1-21
得分:0 
回复 11楼 Agdmeg
还可以改进,内层循环中那个三目判断语句只需要执行一次就可以,没必要放在for的迭代判断环节每次都执行。虽然目前的编译器自己可以完成这个步骤的优化,但我还是建议明确地把它放到循环的初始部分,增加个变量就是了。

重剑无锋,大巧不工
2013-05-25 20:24
beyondyf
Rank: 19Rank: 19Rank: 19Rank: 19Rank: 19Rank: 19
等 级:贵宾
威 望:103
帖 子:3282
专家分:12654
注 册:2008-1-21
得分:0 
回复 12楼 邓士林
动态规划的应用很广,在这方面多下点功夫是值得的。

严格说来,我认为动态规划是一种算法构建思想,它不像各种排序算法之类那么具体,甚至即使没学明白但背会(或复制)那段代码就能到处应用。学动态规划学的是如何分析一个问题的最优子结构。

重剑无锋,大巧不工
2013-05-25 20:33
Agdmeg
Rank: 4
来 自:四川成都
等 级:业余侠客
威 望:3
帖 子:101
专家分:201
注 册:2011-8-9
得分:0 
程序代码:
#include<stdio.h>
void f(int m,int n,int k)
{
    int a[102] = {0}, b[102] = {0}, *pa = a, *pb = b, *pt, i, j,l;
    for(a[m] = 1, i = 1; i <= n; i++, pt = pa, pa = pb, pb = pt)
        for(j = (m-i>=1?m-i:1),l=(m+i<=100?m+i:100); j <= l; j++)
            pb[j] = pa[j - 1] + pa[j + 1];
    printf("%d\n",pa[k]);
}
void main()
{
    int m, n, k;
    scanf("%d%d%d", &m, &n, &k);
    f(m, n, k);
}
的确还可以优化,for里三目判断效率低了,多谢杨大哥指点
收到的鲜花
  • beyondyf2013-05-25 20:45 送鲜花  5朵   附言:很不错
2013-05-25 20:33



参与讨论请移步原网站贴子:https://bbs.bccn.net/thread-407951-1-1.html




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

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