51nod 1383 整数分解为2的幂
2017-05-17 12:35
309 查看
画画,找规律。。。
dp
表示n的划分方法。
当n为奇数的时候,dp
=dp[n-1],n-1每种分解后边都加上一个1就是了。
当n为偶数的时候,dp
=dp[n-1]+dp[n/2],n-1的每种分解都加一个1,这是一种情况,因为n是偶数,还有把1合并成2,把2合并成4的情况,这时候多出的这部分分解后的最小单位是2,分解个数最多的就是n/2个2,把这些数字全部都除以2,正好就是n/2的分解情况。
4=1 1 1 1
1 1 2
2 2
4
7=1 1 1 1 1 1 1 –
1 1 1 1 1 2 –
1 1 1 2 2 –
1 1 1 4 –
1 2 2 2 –
1 2 4 –
//后边带–的是7的分解+1的情况
8=1 1 1 1 1 1 1 1 –
1 1 1 1 1 1 2 –
1 1 1 1 2 2 –
1 1 2 2 2 –
1 1 1 1 4 –
1 1 2 4 –
//这里的都除以2是4的分解情况
2 2 2 2
2 2 4
4 4
8
dp
表示n的划分方法。
当n为奇数的时候,dp
=dp[n-1],n-1每种分解后边都加上一个1就是了。
当n为偶数的时候,dp
=dp[n-1]+dp[n/2],n-1的每种分解都加一个1,这是一种情况,因为n是偶数,还有把1合并成2,把2合并成4的情况,这时候多出的这部分分解后的最小单位是2,分解个数最多的就是n/2个2,把这些数字全部都除以2,正好就是n/2的分解情况。
4=1 1 1 1
1 1 2
2 2
4
7=1 1 1 1 1 1 1 –
1 1 1 1 1 2 –
1 1 1 2 2 –
1 1 1 4 –
1 2 2 2 –
1 2 4 –
//后边带–的是7的分解+1的情况
8=1 1 1 1 1 1 1 1 –
1 1 1 1 1 1 2 –
1 1 1 1 2 2 –
1 1 2 2 2 –
1 1 1 1 4 –
1 1 2 4 –
//这里的都除以2是4的分解情况
2 2 2 2
2 2 4
4 4
8
#include <cstdio> #include <cstring> const int MAXN = 1e6+1; const int mod = 1e9+7; int dp[MAXN]; int main() { int n; scanf("%d",&n); dp[1] = 1; dp[2] = 2; for(int i = 3;i <= n; ++i) { if(i&1) dp[i] = (dp[i-1])%mod; else dp[i] = (dp[i-1]+dp[i/2])%mod; } printf("%d\n",dp ); return 0; }
相关文章推荐
- 51nod 1383 整数分解为2的幂
- 51Nod-1383-整数分解为2的幂
- 51Nod 1048 1383 整数分解为2的幂
- 51nod 1383 整数分解为2的幂(递推)
- 51nod-1383 整数分解为2的幂
- 【51NOD 1383】整数分解为2的幂
- 51nod 1383 整数分解为2的幂【递推】
- [51Nod 1383] 整数分解为2的幂
- 51nod 1383 整数分解为2的幂
- 【51NOD 1048】【51NOD 1383】整数分解为2的幂 V2
- 【51Nod 1383】整数分解为2的幂
- [51Nod 1048] 整数分解为2的幂 V2
- 51nod 1383&1048 整数分解为2的幂 [递推]【数学】
- 1383 整数分解为2的幂 找规律。
- 51nod 整数分解为2的幂
- 51Nod 1048 整数分解为2的幂 V2
- 1383 整数分解为2的幂
- 1383 整数分解为2的幂
- POJ 1845-Sumdiv(快速幂取模+整数唯一分解定理+约数和公式+同余模公式)
- 7-1 整数分解为若干项之和(20 分)