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;
}

全部评论
大佬好厉害 ,带带
点赞 回复 分享
发布于 12-08 15:18 辽宁

相关推荐

产品经理傅立叶:1.建议把个人信息码一下 2.简历的排版还得优化一下,看上去有点乱,另外有一个实习经历实习时间好像多写了一个; 3.实习产出要量化
点赞 评论 收藏
分享
喜欢走神的孤勇者练习时长两年半:池是池,发是发,我曾池,我现黑
点赞 评论 收藏
分享
评论
点赞
收藏
分享
牛客网
牛客企业服务