对于奇数,其中必有1这个拆分所以 f(2n+1)=f(2n)
对于偶数,分为两种情况,
111111.拆分中含有1,则与奇数情况相同 f(2n+2)= f(2n+1)=f(2n)
22222.拆分中不含1,所有数除以2, f(2n)=f(n)
所以 f(2n)=f(2n-2)+f(n)
边界条件为f(1)=1
#include<stdio.h>
#include<stdlib.h>
#define MIX 1000000000
int main(){
int n;
int dp[1000001];
scanf("%d",&n);
dp[0]=1;
for(int i=1;i<=n;i++){
if(i%2==0)
dp[i]=(dp[i-2]+dp[i/2])%MIX;
else
dp[i]=dp[i-1];
}
printf("%d\n",dp[n]);
}
网友评论