1480: 又是划分问题
时间限制: 1 Sec 内存限制: 512 MB
提交: 130 解决: 37 统计
题目描述
给你一个正整数n,将其划分,要求划分成的数必须是2的幂,有多少种划分方法??
结果可能很大,我们输出对1e9+7取模的结果
输入
一个正整数n,代表要划分的数;
1<=n<=1e71<=n<=1e7
输出
输出可划分的方法数
样例输入
15 67
样例输出
26 2030
提示
当n=6时,我们可以将其划分为
1 1 1 1 1 1
1 1 1 1 2
1 1 2 2
2 2 2
1 1 4
2 4
这6种划分方法
这道题要分为奇数和偶数两种情况考虑,当其为偶数时f[n]=f[n-1]+f[n/2],当其为奇数时f[n]=f[n-1],。
#include<algorithm>
#include<cstdio>
#include<iostream>
#include<cstring>
#include<string>
using namespace std;
typedef long long ll;
const int MAXN=1e7+10;
const int mod=1e9+7;
ll f[MAXN];
void solve(){
f[1]=1;
for(ll i=2;i<=MAXN;i++){
if(i%2==0) f[i]=(f[i-1]+f[i/2])%mod;
else f[i]=f[i-1];
}
}
int main(){
ll n;
solve();
while(~scanf("%lld",&n)){
printf("%lld\n",f[n]);
}
return 0;
}