摘要: 这个题的感触是时间的限制,当你使用循环的时候时间会超时,所以必须找到一种更好的算法来解决这个问题。问题定义: A青蛙,初始位置为a,每跳得距离为m;B青蛙,初始位置为b,每跳得距离为n,总长度是L。(1)使用循环求解: 用if( ( (a+m*i)-(b+n*i) )%L==0)为真,则两只青蛙可以相遇。但是这个循环不知道到什么时候停止下来, 可能会运行很长的时间才能停下来。所以这种方法不可行的。(2)使用数论的求解方法:此题其实就是扩展欧几里德算法-求解不定方程,线性同余方程。 设过s步后两青蛙相遇,则必满足以下等式: (x+m*s)-(y+n*s)=k*l(k=0,1,2..... 阅读全文
posted @ 2011-11-26 13:19 菜鸟哥 阅读(135) 评论(0) 推荐(0)
摘要: 动态规划是通过空间减少时间的算法,每次都存储一个求解的最优值,以后就可以使用这个结果不用再重复计算。0-1背包问题中: n是物体的个数,m是背包的总重量,w[i]是第i个物体的重量,p[i]是第i个物体的价值。 (1)定义一个数组c[n+1][m+1]用来存储物体的最大价值,如c[i][j]表示加入第i个物体容量为j时的最大价值是c[i][j]。 (2)数组初始化为零。 (3)c[i][0....m+1]的求解过程如下 a.公式:c[i][j]=max{c[i-1][j],c[i-1][j-w[i])+p[i])} b.公式的意义是:计算不加入第i个物体,替换重... 阅读全文
posted @ 2011-11-26 09:32 菜鸟哥 阅读(87) 评论(0) 推荐(0)