论坛首页 Java企业应用论坛

(ACM系列之一)从简单开始

浏览 6905 次
该帖已经被评为隐藏帖
作者 正文
   发表时间:2011-04-05  
用java写?估计过几天你就会发帖问为什么总是TLE了...
0 请登录后投票
   发表时间:2011-04-05  
看见ACM了进来瞄一下,貌似不适合这个版块。
0 请登录后投票
   发表时间:2011-04-05  
IcyFenix 写道
珠海的……BNUZ?

在JE中贴算法的帖子,很难引起关注的。去各大OJ站的讨论版玩吧。


+1

去poj吧
0 请登录后投票
   发表时间:2011-04-06  
高等数学。。。。。。。
0 请登录后投票
   发表时间:2011-04-06  
记得ACM里面有的算法题很精辟啊

有一道题后面添加的条件是: 程序运行时间必须小于1S(java必须小于2S)

如果追求算法上的效率,使用java就勉强了。 即便你实现了,由于算法上的复杂性,你的代码可维护性和阅读性就大大降低了
0 请登录后投票
   发表时间:2011-04-06  
用java是完全没有问题的,本人有大量实践。楼主不必与人云亦云的一般见识。
0 请登录后投票
   发表时间:2011-04-06  
迭代么,呵呵
0 请登录后投票
   发表时间:2011-04-06  
动态规划会好一些吧。
0 请登录后投票
   发表时间:2011-04-06   最后修改:2011-04-06
楼主,你的思路明显是有问题的,在对于n%49没有任何依据,你先写一个没有优化的算法对你这个优化的进行检证就会发现在n>49的时候就错误了~
1.从这个等式你就可以看书f(n)依赖的是f(n-1)和f(n-2),而对于你摸49比如f(50)变成了
依赖f(1) f(0)了,你能证明f(1) f(0)和 f(49) f(48)相等么?
2.当n=49时,n%49=0 你的循环直接跳出了 ,这个代码本身是有逻辑错误的~

我的测试代码如下~在n<49时 均正确

def c1(a,b,n):
    if n==1 or n==2:
            return 1
    left = 1
    right = 1
    r = 0
    for i in xrange(2,n%49):
            r = (a*left + b*right)%7
            left,right = r,left
    return r

def c2(a,b,n):
    if n==1 or n==2:
            return 1
    left = 1
    right = 1
    r = 0
    for i in xrange(2,n):
            r = (a*left + b*right)%7
            left,right = r,left
    return r


def main():
    for  n in range(3,55):
        print "%d:"%n,c2(2,2,n),c1(2,2,n)

0 请登录后投票
   发表时间:2011-04-06  
解循环的条件是
存在 连续的解x,y 使得:
x == n-2 且 y== n-1
因为 x 取值为0-6, y也为0-6,则xy组合的可能为49种
根据抽屉原理,当n == 50时,必然至少存在一次循环
因此,通过0-49的遍历,首先找出循环点,然后根据n的大小确定循环中的解
0 请登录后投票
论坛首页 Java企业应用版

跳转论坛:
Global site tag (gtag.js) - Google Analytics