首页
题库
面试
求职
学习
竞赛
More+
所有博客
搜索面经/职位/试题/公司
搜索
我要招人
去企业版
登录 / 注册
首页
>
试题广场
>
整数拆分
[编程题]整数拆分
热度指数:28763
时间限制:C/C++ 1秒,其他语言2秒
空间限制:C/C++ 64M,其他语言128M
算法知识视频讲解
一个整数总可以拆分为2的幂的和,例如: 7=1+2+4 7=1+2+2+2 7=1+1+1+4 7=1+1+1+2+2 7=1+1+1+1+1+2 7=1+1+1+1+1+1+1 总共有六种不同的拆分方式。 再比如:4可以拆分成:4 = 4,4 = 1 + 1 + 1 + 1,4 = 2 + 2,4=1+1+2。 用f(n)表示n的不同拆分的种数,例如f(7)=6. 要求编写程序,读入n(不超过1000000),输出f(n)%1000000000。
输入描述:
每组输入包括一个整数:N(1<=N<=1000000)。
输出描述:
对于每组数据,输出f(n)%1000000000。
示例1
输入
7
输出
6
马上挑战
算法知识视频讲解
提交运行
算法知识视频讲解
添加笔记
求解答(125)
邀请回答
收藏(612)
分享
提交结果有问题?
76个回答
29篇题解
开通博客
健康快乐最重要
发表于 2020-03-02 15:43:33
被动态规划玩儿坏了。。。 首先说明思路:每一个数都可以拆成2的次幂的形式,2的次幂有(1,2,4,6,8...),其中只包括一个奇数,那就是1。 假设给定一个数N:1.N是奇数,那么N拆分的时候必定有一个1,因为2的次幂除了1都是偶数,由很多偶数不可能构成奇数。所以 f(N)=f(N-1)举例:
展开全文
烤肉__
发表于 2022-01-26 20:16:22
当成完全背包求解是最容易想到的方法 #include <iostream> #include <algorithm> using namespace std; const int N = 1e6 + 10, mod = 1000000000; int n; int f[N
展开全文
flyflyfly00
发表于 2021-04-23 11:12:23
搬运一下思路:记f(n)为n的划分数,我们有递推公式: f(2m + 1) = f(2m),f(2m) = f(2m - 1) + f(m),初始条件:f(1) = 1。 证明: 证明的要点是考虑划分中是否有1。 记:A(n) = n的所有划分组成的集合,B(n) = n的所有含有1的划分组成的
展开全文
philos
发表于 2021-02-03 17:00:03
思路 对于一个数字 n,如果 n 是奇数,那么 n 的所有组合方式中一定包含一个 1,那么它和 n-1 的组合方式种数相同,dp[n] = dp[n-1]; 如果 n 是偶数,那么它的组合方式中可能有 1,也可能没有 1,有 1 的组合方式有 dp[n - 1] 种,没有 1 的组合方式有 dp[n
展开全文
宁静的冬日
发表于 2022-03-05 16:39:13
【C++】已通过 需要采用递推,递归和递归+动态规划的方式都会出现一些问题,栈溢出 #include<iostream> using namespace std; #define MAXINT 1000000000 #define MAXN 1000000 int mem[MAXN +
展开全文
Huster水仙
发表于 2023-02-13 00:20:52
完全背包变形 (参考高赞回答) 第i轮 dp[j]:前i种物品组合成容量恰好为j的方法数 递推关系:类比完全背包(优化) dp[j]=dp[j]+dp[j-w[i]] #include<iostream> #include<cmath> using namespace s
展开全文
ImSev7en_1
发表于 2022-09-10 16:07:25
解决本题目的关键在于: 对于1的处理即划分是否包含1. #include <iostream> using namespace std; #define MAXN 1000001 int main(){ &
展开全文
雨水磁浮
发表于 2025-02-23 12:47:18
一望而知的递归题,因此首先寻找规律。 显然可以且仅可以展开为。对于一个非正整数,其一定可以表示为,而显然无法被进一步展开,因此其展开方法数至少应该等于,即。若为奇数,则和的展开相比仅可能在的所有展开的基础上多出一个(这是因为的所有整数幂中只有为奇数),因此另一方面,若为偶数时,其可以通过有种展开的奇
展开全文
程昱同学
发表于 2023-01-18 21:03:40
#include <bits/stdc++.h> using namespace std; int main() { int N; cin>>N; int dp[N+1];//dp[i]=整数i的拆分种数 dp[1]=1;//整数1只有一种拆分
展开全文
在考古的小鱼干很有气魄
发表于 2023-03-11 10:21:02
#include <bits/stdc++.h> #define MAX 1000000 using namespace std; int main() { int n; int dp[MAX]; while (cin >> n) {
展开全文
问题信息
动态规划
递归
难度:
76条回答
612收藏
29234浏览
热门推荐
通过挑战的用户
查看代码
CITYHUA
2023-03-12 18:41:53
奔放的小飞象在敲键盘
2023-03-08 16:50:35
牛客91553...
2023-02-27 09:27:26
Huster水仙
2023-02-13 00:23:47
森林万象
2023-01-16 18:21:55
相关试题
执行完下列语句段后,i值为()
递归
评论
(16)
以下关于Go的说法正确的是() 1...
Go
评论
(1)
" target="_blank">
判断推理
评论
(1)
以下哪种方法可以有效提升Agent...
Agent
评论
(1)
为咖啡连锁"醒时咖啡",撰写一段新...
Prompt判断
评论
(1)
整数拆分
扫描二维码,关注牛客网
意见反馈
下载牛客APP,随时随地刷题
7
6