玲珑杯1006 Spoon Devil Love Arithmetic

来源:互联网 发布:手机电视互动软件 编辑:程序博客网 时间:2024/04/20 15:39

【题目链接】http://www.ifrog.cc/acm/problem/1006

【题意】求一个数n,用2的幂次来表示可以有多少种表示方法?

【解题方法】一个非常经典的dp了。dp[i]表示数i的表示方法数,容易知道当i%2==1时,dp[i]=dp[i-1],当i%2==0,dp[i]=dp[i-1]+dp[i/2]。

【AC 代码】预处理答案就行了。

////Created by just_sort 2016/9/25 13:42//Copyright (c) 2016 just_sort.All Rights Reserved//#include <set>#include <map>#include <queue>#include <stack>#include <cmath>#include <cstdio>#include <cstdlib>#include <cstring>#include <iostream>#include <algorithm>using namespace std;const int mod = 1000000000;const int maxn = 1000010;int dp[maxn];void work(){    dp[1]=1;    dp[2]=2;    dp[3]=2;    dp[4]=4;    dp[5]=4;    for(int i=6; i<maxn; i++){        if(i&1){            dp[i] = dp[i-1];        }else{            dp[i] = (dp[i/2]+dp[i-1])%mod;        }    }}int main(){    work();    int T;    scanf("%d",&T);    while(T--){        int n;        scanf("%d",&n);        printf("%d\n",dp[n]);    }    return 0;}


0 0
原创粉丝点击