POJ 2229 Sumsets (递推&整数划分变形)

将一个正整数n表示成一系列的正整数之和,求共有几种划分方法  题目:将一个正整数n表示成一系列的正整数之和:求共有几种划分方法n=n1+n2+n3+.....+nk   (n1>=n2>=n3.......>=1, k>=1)被称作正整数的一个划分。正整数n可能存在不同的划分,例如正整数6的全部划分为6=66=5+16=4+2     6=4+1+16=3+3       6=3+2+1       6=3+1+1+16=2+2+2   6=2+2+1+1 阅读详情
Sumsets

Time Limit: 2000 MS     
Memory Limit: 200000 KB

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).

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

Source


思路:假设加数按从小到大的顺序。当n为奇数时,第一个数必须为1,此时f(n)=f(n-1);当n为偶数时,分两种情况讨论,若第一个数为1,则f(n)=f(n-1),若第一个数不为奇数,则所有数都不为奇数,提出一个公因子2出来,就是f(n/2),所以,f(n)=f(n-1)+f(n/2)

完整代码:
/*63ms,4300KB*/

#include<cstdio>
const int mod = 1e9;
const int maxn = 1000001;

int f[maxn];

int main()
{
	int n, i;
	f[1] = 1, f[2] = 2;
	for (i = 3; i < maxn; ++i)
		f[i] = (i & 1 ? f[i - 1] : (f[i - 2] + f[i >> 1]) % mod) ;
	while (~scanf("%d", &n))
		printf("%d\n", f[n]);
	return 0;
}

整数划分问题(递归&递推) 1:问题描述: 整数划分问题是将正整数n表示成一系列正整数之和:n=n1+n2+n3+...+nk,其中n1>=n2>=n3>=...nk>=1,这种表示方法称为整数划分。求正整数n的不同划分个数。 例如:6的整数划分如下(共11种) 6 5+1 4+2;4+1+1; 3+3;3+2+1;3+1+1+1; 2+2+2;2+2+1+1;2+1+1+1+1+1; 1+1+1+1+1+1 阅读详情

相关推荐

整数划分,并输出结果

整数划分,并输出相应结果,注释完整,可以运行,C/C++

问题 H: 数论:整数划分方案

题目描述 整数划分就是将一个正整数表示成一系列正整数之和,问有多少种不同划分方案! 例如整数6可以划分成已下11种方案: 6 5 + 1 4 + 2 4 + 1 + 1 3 + 3 3 + 2 + 1 3 + 1 + 1 + 1 2 + 2 + 2 2 + 2 + 1 + 1 2 + 1 + 1 + 1 + 1 1 + 1 + 1 + 1 + 1 + 1 输入正整数n,计算n有多少种不同划分方案。 输入 包括多组数据,每组1个整数

m0_51374762的博客 1454

BeautyGAN: Instance-level Facial Makeup Transfer with Deep Generative Adversarial Network(2018,妆容迁移)

论文下载地址:BeautyGAN | Proceedings of the 26th ACM international conference on Multimedia 目的:在实例级实现化妆图像和非化妆图像的妆容迁移 方法:全局域集损失和本地实例级损失合并到一个双输入/输出对抗生成网络。步骤:使用一对鉴别器将非化妆面传输到化妆域,鉴别器从域的真实样本中分辨出生成的图像。在域集迁移的基础上,采用基于不同人脸区域的像素级直方图损失来实现实例级迁移。为了保持人脸的一致性和消除伪影,在总体目标函数中加入了.

weixin_53965540的博客 664

简单整数划分(递归法+动态规划法)

整数划分: 所谓整数划分,就是将一个数n写成正整数相加的形式,如3可以划分为1+1+1,1+2,3等三种情况,而f(n,m)则表示,划分数中最大的数小于m时n的划分。如f(3,2)就是1+1+1,1+2两种。 递归法: 根据n和m的情况,有如下几种情况 1.当n == 1或m == 1时,都只有一种划分,其中n==1时,只有一种划分{1},只有m == 1时,只有一种划分{1,1,

acmer_mozhu的博客 957

TMS320F280039 CMD文件配置避坑指南:从.map文件看懂内存分配与溢出排查

本文详细解析了TMS320F280039芯片的CMD文件配置问题,通过.map文件分析内存分配与溢出排查。文章提供了实用的诊断技巧和解决方案,帮助开发者有效应对段溢出、地址重叠和栈堆冲突等常见问题,优化DSP程序的内存管理。

weixin_29168813的博客 446

JavaFX - 动画

JavaFX 动画

思你日度难眠 1603

整数划分问题

深度剖析整数划分问题,从一个普通的dp到熟悉的模型~

2301_79178851的博客 2737

手机VPN的连接方法分享

6、返回到VPN页面,可以看到刚刚新添加的VPN,点击开启VPN后面的开关。5、在打开的添加VPN的页面中输入VPN的信息后点击右上角的“保存”按钮。7、待VPN开关开启后,可以看到添加的VPN正在连接的提示信息了。2、在打开的小米手机设置页面中点击“更多连接方式”的菜单项。3、然后在打开的更多连接方式页面中点击VPN的菜单项。4、在打开的VPN设置页面中点击“添加VPN”的按钮。1、首先在手机屏幕左右的滑动,找到手机的设置图标。

惠惠软件 3万+

poj 2229 Sumsets(递推&整数划分变形)

求把一个整数分解为2的幂的和共有几种方案 6=1+1+1+1+1+1 6=1+1+1+1+2 6=1+1+2+2 6=1+1+4 6=2+2+2 6=2+4 7=1+1+1+1+1+1+1 7=1+1+1+1+1+2 7=1+1+1+2+2 7=1+1+1+4 7=1+2+2+2 7=1+2+4

u013365671的专栏 488

yolov8 转华为昇腾om脚本

yolov8 转华为昇腾om脚本

jacke121的专栏 1602

QT5.12.1报错:1. clang++:error: :fatal error andriod Input/output error

QT5.12.1报错:1. clang++:error: :fatal error andriod Input/output error 解决方式: 1.qt程序不要放在共享目录下编译,直接拷贝到ubuntu系统中编译 2.修改/home/xt/Qt5.12.1/5.12.1/android_armv7/mkspecs/android-clang中 #QMAKE_LINK = QMAKECXXQMAKE_CXX QMAKEC​XXQMAKE_CFLAGS -Wl,–exclude-libs,libgc

xt18971492243的博客 738

Sumsets POJ - 2229 (完全背包变形 || 简单dp)

Sumsets POJ - 2229 (完全背包变形 || 简单dp) 题目链接 题目大意:求把一个整数分解为2的幂的和共有几种方案 7=1+1+1+1+1+1+1 7=1+1+1+1+1+2 7=1+1+1+2+2 7=1+1+1+4 7=1+2+2+2 7=1+2+4 输出6 思路:一开始的时候推过,没推出来。后来看了一眼题解,说是完全背包的变形,顿悟。可还是没想出来怎么变...

deerly_的博客 380

RandLA-Net Tensorrt 推理 c++

RandLA-Net 实现 Tensorrt 部署.

J。 1111

第一讲,整数划分 JAVA 代码(分治实现之一)

整数划分问题相信很多人都做过,题意是这样的: 将正整数n表示成一系列正整数之和, n=n1+n2+,,,,,+nk(其中n1>=n2>=......>=nk>=1,k>1) 例如:正整数6有如下11种不同的划分, 6=1+1+1+1+1+1 6=1+1+1+1+2 6=1+1+1+3 6=1+1+2+2 6=1+1+4 6=1+2+3 6=1+5 6=2+2+

远飞 2375

基于OpenCV的实时疲劳检测系统实现

本文介绍了一个基于OpenCV的实时疲劳检测系统,使用Python实现。系统通过Haar级联分类器检测人脸和眼睛,计算眼睛宽高比(EAR)和PERCLOS(眼睛闭合时间比例)来评估疲劳程度,分为4个等级:正常、轻度、中度和重度疲劳。核心代码包含人脸眼睛检测、疲劳评估和可视化显示功能,具有实时性、稳定性和直观的视觉反馈。系统可通过摄像头实时监控驾驶员状态,为疲劳驾驶预警提供简单有效的解决方案。

weixin_62135607的博客 232

Data-Structures-and-Algorithm-Analysis-in-Java.pdf

作者: Weiss, Mark A. 出版社: Addison Wesley Data Structures and Algorithm Analysis in Java is an &ldquo;advanced algorithms&rdquo; book that fits between traditional CS2 and Algorithms Analysis courses. In the old ACM Curriculum Guidelines, this course was known as CS7. This text is for readers who want to learn good programming and algorithm analysis skills simultaneously so that they can develop such programs with the maximum amo...

算法学习之递归(个人学习)

一、递归的概念直接或间接的调用自身的函数/算法叫递归函数/算法。为了进一步理解递归的含义,从以下几个题进行介绍:二、具体例题:题目来源:牛客来源:牛客网。

apple_60666910的博客 992

visio安装包

Microsoft Office Visio 是一款专业的制图软件。利用经过更新的形状、协作工具和数据链接图表,创建专业级图表以简化复杂的信息。

整数划分

将正整数n表示成一系列正整数之和:n=n1+n2+…+nk,  其中n1≥n2≥…≥nk≥1,k≥1。  正整数n的这种表示称为正整数n的划分。求正整数n的不  同划分个数。  例如正整数6有如下11种不同的划分:  6;  5+1;  4+2,4+1+1;  3+3,3+2+1,3+1+1+1;  2+2+2,2+2+1+1,2+1+1+1+1;  1+1+1+1+1+1。

jy7788的专栏 622

jdk-8u144-linux-x64.tar.gz.

该资源为搭建Linux系统Java环境用,资源的后缀为tar.gz格式的压缩包

ET2012新版免狗免安装绿色软件

ET2012新版免狗免安祖昂绿色软件。,新界面,新视觉,

[正整数划分]将正整数n表示一系列正整数之和

用python 实现之:    #!/usr/bin/python # -*- coding: utf-8 -*- ## 算法:求正整数n的所有可能和式组合, 并输出组合: ## 思路:按照算法设计与分析上的: ## q(n, m)= ## 1. m=1, n=1: 只有一种情况 ## 2. n ## 3. n>m>1: q(n, m-1) + q(n-m, m)

in_han 的专栏 3326

数论:整数划分方案(其他解决方案)

整数划分就是将一个正整数表示成一系列正整数之和,问有多少种不同划分方案!例如整数6可以划分成已下11种方案:65 + 14 + 24 + 1 + 13 + 33 + 2 + 12 + 2 + 2输入正整数n,计算n有多少种不同划分方案。

banbi040217的博客 1082

整数划分算法原理与实现

http://www.kuqin.com/algorithm/20080511/8342.html 整数划分问题是将一个正整数n拆成一组数连加并等于n的形式,且这组数中的最大加数不大于n。将正整数划分成连续的正整数之和,如15可以划分成4种连续整数相加的形式。 整数划分问题是将一个正整数n拆成一组数连加并等于n的形式,且这组数中的最大加数不大于n。    如6的整数划分为       

g_idea的专栏 1518

整数划分问题(分苹果)

整数划分  对于任意一个正整数n,它可以表示为多个其他正整数相加。例如: 6 = 6 = 5 + 1 = 4 + 2 = 4 + 1 + 1 = 3 + 3 = 3 + 2 + 1 = 3 + 1 + 1 + 1…  我们称这种不同的组合为不同的整数划分。这类问题是经典的组合数学问题。常常要用到动态规划。 经典整数划分问题  给定两个数,n和m。请问n的最大加数为不超过m的...

frostime的博客 2253

整数划分总结

https://blog.youkuaiyun.com/dacc123/article/details/50664738

布呗之路 356

全排列的编码与解码——康托展开 (附完整代码)

一、康托展开:全排列到一个自然数的双射 X=an*(n-1)!+an-1*(n-2)!+...+ai*(i-1)!+...+a2*1!+a1*0! ai为整数,并且0  适用范围:没有重复元素的全排列 二、全排列的编码: {1,2,3,4,...,n}的排列总共有n!种,将它们从小到大排序,怎样知道其中一种排列是有序序列中的第几个? 如 {1,2,3} 按从小到大排列一共6个:

AC,∑ndless 8527
上一篇: UVa 10148 Advertisement (贪心&标记法单个处理)
下一篇: POJ 2385 Apple Catching (DP)
synapse7
博客等级 码龄14年 432粉丝 701原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值