当前位置: 首页 > news >正文

D. 例题3.2.2 整数划分问题

题目描述

将正整数n表示成一系列正整数之和:n=n_1+n_2+...+n_kn=n1​+n2​+...+nk​,其中8\geq n_1\geq n_2\geq ...\geq n_k\geq 18≥n1​≥n2​≥...≥nk​≥1,k\geq1k≥1。正整数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。

Copy

输入格式

一个正整数 n

保证 n\leq 8n≤8

输出格式

一个正整数 m,表示n可以被分成m种

input


6

Copy

output


11

Copy

数据规模与约定

时间限制:1s

空间限制:256MB

这道题其实就是根据这个n然后把已知的所有条件都求出来就即可。

整数划分问题将正整数n表示成一系列正整数之和,n=n1+n2+……+nk n1>=n2>=………>=nk>=1;k>=1正整数n的划分数,记为p(n)。例如正整数6有如下11种不同的划分,所以p(6)=11在最大加数n1不大于m的划分个数记作q(n,m)。 q(n,m)=1, 当n=1,m=1;q(n,m)=q(n,n) 当n<m; q(n,m)=1+q(n,n-1) 当n==m;q(n,m)=q(n,m-1)+q(n-m,m) 当n>m


#include<bits/stdc++.h>
using namespace std;
int fun(int n, int m)
{
    if(n==1||m==1)return 1;
    else if(n<m)return fun(n,n);
    else if(n==m)return (1+fun(n,m-1));
    else return(fun(n,m-1)+fun(n-m,m));
}
int main()
{
//    freopen("decompose.in","r",stdin);
//    freopen("decompose.out","w",stdout);
    int n;
    cin>>n; 
    cout<<fun(n,n);
    return 0;
}
 

相关文章:

  • python进阶(2)二进制
  • 【分享】Winlator 10.0[特殊字符]虚拟电脑 可玩游戏办公[特殊字符]
  • mvvm 如何 实现 MultiBinding 与转换器
  • 数据结构*队列
  • python下载
  • Java从入门到精通 - Java语法
  • DeepSeek与MySQL:开启数据智能新时代
  • mysql 云服务远程linux创建数据库
  • 阿里巴巴Qwen团队发布了新一代多模态模型Qwen2.5-Omni-3B
  • Easy云盘总结篇-登录注册
  • 二种MVCC对比分析
  • MyBatis的工作原理
  • 构建高效老年基础护理实训室,培养专业护理人才
  • Servlet+tomcat
  • LeetCode —— 145. 二叉树的后序遍历
  • 基于「骑手外卖系统」串联7大设计原则
  • excel中图下标不按设定的位置留空间
  • 64常用控件_多元素控件介绍
  • 第一章 初识SpringMVC
  • <servlet-class>和</url-pattern>的作用
  • 暴雨蓝色预警:南方开启较强降雨过程
  • 国新办将于5月8日10时就《民营经济促进法》有关情况举行新闻发布会
  • 同为“东部重要中心城市”后交出首份季报:宁杭苏表现如何?
  • 刘诚宇、杨皓宇进球背后,是申花本土球员带着外援踢的无奈
  • 中标多家学校采购项目的App查成绩需付费?涉事公司回应
  • 多省份晒出“五一”旅游“成绩单”:北京游客接待量、旅游消费创历史新高