动态规划-整数拆分

对于奇数,其中必有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
#include
#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]);
}

你可能感兴趣的:(动态规划-整数拆分)