| 网站首页 | 业界新闻 | 小组 | 威客 | 人才 | 下载频道 | 博客 | 代码贴 | 在线编程 | 编程论坛
欢迎加入我们,一同切磋技术
用户名:   
 
密 码:  
共有 3263 人关注过本帖
标题:Uva 371 一直超时 求大佬解答
只看楼主 加入收藏
ehszt
Rank: 12Rank: 12Rank: 12
等 级:贵宾
威 望:40
帖 子:1745
专家分:3216
注 册:2015-12-2
收藏
得分:0 
这样呢?
#include <stdio.h>
#define M 1000001
int ss[M] = {0};

int fun(long long n)
 {
     if (1 == n || n < M && ss[n]) return ss[n];

     int tmp = n % 2 ? fun(n * 3 + 1) : fun(n / 2);

     if (n < M) ss[n] = tmp + 1;

     return tmp + 1;
 }

int main()
 {
     int l, h, v, s, tmp;

     while (2 == scanf("%d%d", &l, &h) && l && h)
     {
         s = 0, v = l;
         if (l > h) tmp = l, l = h, h = tmp;
         for (int i = l; i <= h; ++i)
         {
             if(!ss[i]){
                 fun(i);
             }
             if (s < ss[i]) s = ss[i], v = i;
         }
         
         printf("Between %d and %d, %d generates the longest sequence of %d values.\n", l, h, v, s);
     }
     return 0;

 }
2017-03-13 13:16
九转星河
Rank: 19Rank: 19Rank: 19Rank: 19Rank: 19Rank: 19
来 自:长长久久
等 级:贵宾
威 望:52
帖 子:5023
专家分:14003
注 册:2016-10-22
收藏
得分:0 
回复 31楼 ehszt
~~~~~

[code]/*~个性签名:bug是什么意思?bug是看上去没有可能的东西实际上是有可能做到的 就是这样~2018-08-08更~*/[/code]
2017-03-13 13:27
Lukyo
Rank: 1
等 级:新手上路
帖 子:33
专家分:6
注 册:2016-9-18
收藏
得分:0 
谢谢大佬们
除了 1 1  这对输出错误其余的都可以
不过我表示看不懂这个算法
2017-03-13 20:07
ehszt
Rank: 12Rank: 12Rank: 12
等 级:贵宾
威 望:40
帖 子:1745
专家分:3216
注 册:2015-12-2
收藏
得分:0 
以下是引用Lukyo在2017-3-13 20:07:21的发言:

谢谢大佬们
除了 1 1  这对输出错误其余的都可以
不过我表示看不懂这个算法

我把这个算法归纳为:不提前算,算过了把值记录下来(用数组),算新值时算到以前记录的结果直接加。最后比较输出。
举个例子:算
[10] 5 16 8 4 2 1 [6],算完了把10 5 16 8 4 2都记录到了数组ss[M],下标为它的值(10 5 16 8 4 2),它的值(ss[10] ss[5] ss[16] ss[8] ss[4]..)为(10 5 16 8 4 ..),产生的项数。
以后碰到10 5 16 8 4 2中任意一个就不用算下去了,直接把算出的项数加上10产生的项数就可以了。
比如算到13往后算是40再是20,这有两项了,再算就是10,一共三项,那么13产生的项数为3+ss[10]=3+6=9;
[13] 40 20 10 5 16 8 4 2 1 [9]
然后再把9存入ss[13]
这个算法的优点,如果重复计算,算的次数越多,速度越快。因为ss[M]数组渐渐的被填满了。

[此贴子已经被作者于2017-3-13 20:46编辑过]

2017-03-13 20:42
Lukyo
Rank: 1
等 级:新手上路
帖 子:33
专家分:6
注 册:2016-9-18
收藏
得分:0 
回复 34楼 ehszt
噢~
谢谢大佬!!!!!
2017-03-13 20:51
快速回复:Uva 371 一直超时 求大佬解答
数据加载中...
 
   



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

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