dp方法
PC快脱单了
http://www.nowcoder.com/questionTerminal/9e2ca6911b34440994f13b642031a204
很容易想到dp;我们只需要初始化dp【1】=2,dp【2】=3,意思是 n为1时 有2种情况,n为2时有3种,这个应该很好算;
然后我们:
for(int i=3;i<=n;i++)
dp[i]=(dp[i-1]+dp[i-2]);
意思是 当第i个选0时对前 i-1个数如何排不会有影响 那么 这种情况的个数就是dp【i-1】,当第i个数选1时,第i-1个数只能选0,同理 因为第
i-1个数为0,对前面i-2个数没影响 故此情况的个数为dp【i-2】,因为i只能去 0或1 ,我们都考虑完了 然后就是这2种情况相加;
别忘了取模
ac代码
#include
using namespace std;
const int mod=1e9+7;
int dp[10000010];
int main()
{int n;
cin>>n;
dp[1]=2;
dp[2]=3;
for(int i=3;i<=n;i++)
dp[i]=(dp[i-1]+dp[i-2])%mod;
cout<<dp[n]<<endl;
}