Sumsets
Time Limit: 2000MS | Memory Limit: 200000K | |
Total Submissions: 11899 | Accepted: 4787 |
Description
Farmer John commanded his cows to search for different sets of numbers that sum to a given number. The cows use only numbers that are an integer power of 2. Here are the possible sets of numbers that sum to 7:
1) 1+1+1+1+1+1+1
2) 1+1+1+1+1+2
3) 1+1+1+2+2
4) 1+1+1+4
5) 1+2+2+2
6) 1+2+4
Help FJ count all possible representations for a given integer N (1 <= N <= 1,000,000).
1) 1+1+1+1+1+1+1
2) 1+1+1+1+1+2
3) 1+1+1+2+2
4) 1+1+1+4
5) 1+2+2+2
6) 1+2+4
Help FJ count all possible representations for a given integer N (1 <= N <= 1,000,000).
Input
A single line with a single integer, N.
Output
The number of ways to represent N as the indicated sum. Due to the potential huge size of this number, print only last 9 digits (in base 10 representation).
Sample Input
7
Sample Output
6
题意:
给出数 N (1 ~ 1000000),输出有多少种表示和的方式。每个加数都必须是以2为底的次方数。
思路:
简单递推。分为偶数和奇数来讨论:
比如:
1 可以表示成 1,有 1 种;
2 可以表示成 1 + 1, 2,有 2 种;
3 可以表示成 1 + 1, 2 + 1 ,有 2 种;
4 可以表示成 (1 + 1 + 1, 2 + 1 + 1)( dp [ 3 ] ) ,( 2 + 2 , 4 ) ( dp [ 2 ] ),有 4 种。 如此递推下去,可以发现:
当 N 为奇数时,dp [ N ] = dp [ N - 1 ];
当 N 为偶数时,dp [ N ] = dp [ N - 1 ] + dp [ N / 2 ]。结果 % 1000000000 即可。
AC:
#include <cstdio> #include <cstring> #include <algorithm> using namespace std; typedef long long ll; const ll MOD = 1000000000; ll dp[1000005]; int main () { int n; scanf("%d", &n); dp[1] = 1; dp[2] = 2; for (int i = 3; i <= n; ++i) { if (i % 2) dp[i] = dp[i - 1]; else dp[i] = dp[i - 1] + dp[i / 2]; dp[i] %= MOD; } printf("%lld\n", dp[n]); return 0; }
相关推荐
在MATLAB编程环境中,"bestspeculate.rar"这个压缩包文件包含了关于利用循环递推实现最小二乘法的实例。最小二乘法是一种常见的数据拟合技术,它用于找到最佳的线性参数估计,使得观测数据与模型预测值之间的残差...
递推算法是一种常见的算法,它通过已知的前几个数的数值,逐步推导出后续的数值。递推与动态规划(DP)在某些方面有相似之处,但它们在解决问题的方式和适用的场景上存在差异。动态规划通常涉及到状态转移方程的定义...
递推问题:递推与递归解法 递推问题的一般步骤: 一. 判断是否属于递推问题:这个没有可套用的公式,凭经验,具体问题具体考虑 如果把问题的规模缩小,得到的小问题与原问题在结构上性质上相同或相似,并且子问题与...
递推求解是一种在计算机科学和数学中广泛使用的解决问题的方法,尤其在算法设计和理论分析中扮演着重要的角色。递推公式是递推求解的核心工具,它通过定义当前值与前一个或多个值的关系来表示序列或序列的元素。递推...
**归纳策略之递推算法详解** 递推算法是一种在解决问题时,通过定义当前状态与前一个或几个状态之间关系的方法。这种关系通常被表述为一个递推公式,用于描述序列中每一项如何由前面的项计算得出。在给定的描述中,...
**递推专题训练** 在计算机科学领域,尤其是编程竞赛如NOIP(全国青少年信息学奥林匹克竞赛)和ACM(国际大学生程序设计竞赛)中,递推作为一种强大的算法思想,经常被用于解决各种复杂问题。递推是通过已知的前几...
递推最小二乘法matlab程序
本文所介绍的是一种基于递推预报误差算法的前馈神经网络的设计。这种网络设计在非线性系统模型的仿真试验中表现出了良好的效果,同时在文中也给出了试验的结果和网络应用的讨论。 首先需要了解的是前馈神经网络。...
本主题将深入探讨两种滤波方法:递推平均滤波(Recursive Average Filtering)和加权滤波(Weighted Filter),并通过C++编程示例进行阐述。 递推平均滤波是一种简单的线性滤波器,它通过不断更新平均值来实现对...
递推算法通常分为前向递推和后向递推,其中前向递推是从已知项开始,逐项推出后续项;后向递推则是从已知项开始逆向计算前一项。在实际编程应用中,递推算法可以用来求解诸如斐波那契数列等问题。 2. 楼梯走法问题...
算法分析中经常遇到需要求解递推式的情况,即将递推式改写为等价的封闭形式。例如汉诺塔问题的时间复杂度递推 形式为 T (n)=2T (n−1)+1 (n≥1) ,可以解出封闭形式为 T (n)=2 n −1 (设初始状态 T (0)=0 )。 因为...
这里是本蒟蒻整理/写的递归递推经典题目 上传供大家学习使用 包含:过河卒、过河卒升级版、汉诺塔、级数求和、勒让德多项式、流感传染、判断回文、判断元素是否存在、平方根级数、平面分割升级版、全排列递归版、...
递推最小二乘算法递推最小二乘算法递推最小二乘算法递推最小二乘算法递推最小二乘算法递推最小二乘算法
这两道题目都是基于递推关系来解决实际问题的典型实例,它们都涉及到寻找特定序列的通项公式,并通过编程实现来求解。 首先看第一道题,猴子爬山问题。猴子上山每步可以跳1级或3级,我们要找出到达30级台阶的不同...
"递推最小二乘法" 递推最小二乘法是解决线性方程组的重要方法之一。该方法基于递推最小二乘算法(RLS),可以求解线性方程组的最优解。递推最小二乘法的思想是将线性方程组转换为递推形式,然后使用递推最小二乘...
学习常用算法之递推法 递推法是一种常用的算法,用于解决某个特定问题。它是一组有限个规则,提供了解决问题的运算序列。在计算机科学中,递推法是一种重要的算法思想,它可以帮助我们解决复杂的问题。 递推法的...
文档中包含了递推算法的概念,这是递推平均滤波的核心原理,通过递推关系计算结果,相对于传统迭代方法节省了资源。 文档提供了一个在实际中运用递推平均滤波的例子,并且演示了如何通过Python编程实现这一算法,...
rls算法,递推最小二乘法是最小二乘法中的一种快速算法。递推最小二乘(RLS)算法在迭代过程的每一步都能达到最佳迭代算法。RLS算法可以使输出信号在最小二乘意义上尽可能接近期望信号,因为它可以选择自适应滤波器...
### 自适应与系统辨识中增广递推最小二乘法Matlab源程序及仿真 #### 一、知识点概述 本文档主要介绍了在系统辨识领域应用递推最小二乘法(RLS)及其变种——增广递推最小二乘法(ERLS)和广义递推最小二乘法(GRLS)进行...