摘要: 解题思路:题意很明确,就是让求满足条件:1、第一个数必须是1;2、相邻两个数之差不大于2 的排列的种数。可以得出递推公式:f[i]=f[i-1]+f[i-3]+1,其中 f[n]即为所求。View Code 1#include<iostream>2#include<cstdio>3usingnamespacestd;45intmain()6{7inti,n,f[60];8f[1]=1;9f[2]=1;10f[3]=2;11for(i=4;i<60;i++)12f[i]=f[i-1]+f[i-3]+1;13while(cin>>n)14{15cout&l 阅读全文
posted @ 2012-03-28 09:17 笑巧 阅读(144) 评论(0) 推荐(0) 编辑
摘要: 解题思路:由于n的范围在1~100,000,000,所以利用常规的每次保存上次运算结果的方法绝对会TLE。题中mod7,即为解题的突破口,由于mod 7 所以f(n)的值只可能有7种结果(0~6),另由f(1) = 1, f(2) = 1, f(n) = (A * f(n - 1) + B * f(n - 2)) mod 7,其中A * f(n - 1) + B * f(n - 2)的结果所构成的序列的周期最多不过49,因为由排列组合的原理,f(n-1) 有7中结果,f(n-2)有 7种结果,可得共49种变化。可以把每个结果保存在数组中,直到发现数组的值又变回f(n)=1,f(n-1)=1;时 阅读全文
posted @ 2012-03-28 09:10 笑巧 阅读(177) 评论(0) 推荐(0) 编辑