poj2229
Posted acm-jing
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了poj2229相关的知识,希望对你有一定的参考价值。
一、题意:给定一个数n,将它分解成2^i的和的形式,求不同的分解数。
二、思路:poj崩了,暂时不能确定思路是否正确。
三、代码:
#include"iostream" #include"stdio.h" #include"math.h" using namespace std; const int MAXN=1000005; const long long MOD=1000000000; int dp[2][MAXN]; int num; void GetRes(int n) { num=floor(log2(n))+1; for(int i=0;i<num;i++) dp[i&1][0]=1; for(int j=1;j<=n;j++) dp[0][j]=0; for(int i=0;i<num;i++) { for(int j=1;j<=n;j++) { if(j-pow(2,i)>=0) dp[(i+1)&1][j]=(dp[(i+1)&1][j-int(pow(2,i))]+dp[i&1][j])%MOD; else dp[(i+1)&1][j]=dp[i&1][j]%MOD; } } cout<<dp[num&1][n]<<endl; } int main() { int n; while(scanf("%d",&n)==1) { GetRes(n); } return 0; }
以上是关于poj2229的主要内容,如果未能解决你的问题,请参考以下文章