极值问题(斐波那契数列)

来源:互联网 发布:浙大网新 人工智能龙头 编辑:程序博客网 时间:2024/06/02 05:49

咋一看没切入点, 然后就崩了。

k 的大小决定了此题不能枚举。

转化成其他相同形式很关键!!

(n^2-n*m-m^2)^2 =  ( -(m+n)^2 + 2n^2 + m*n)^2 = ((m+n)^2 - (n+m)*n + n^2)^2

发现 n 等价与 n + m

m 等价于 n

也就是斐波那契数列都满足于此式

而且m, n 为相邻的斐波那契数

所以找最接近k的两个就行了= =

观察和转化很重要!!!

代码如下

#include <cstdio>#define max(a,b) a>b?a:bint dp[1000001];int main(){int i, j, k;scanf("%d", &k);dp[0] = dp[1] = 1;for(i = 2; i <= 1000001; i++){dp[i] = dp[i-1] + dp[i-2];if(dp[i] > k){printf("m=%d\nn=%d\n", dp[i-2], dp[i-1]);return 0;}}return 0;} 


原创粉丝点击