problem

  • 将整数n分成k份,
  • 满足1、每份不能为空
  • 满足2、任意两种划分方案不能相同(不考虑顺序)
  • 问有多少种不同的分法
  • n<=200,k<=6

例:n=7,k=3:1,1,5;,,,,,1,5,1;,,,,5,1,1是一样的。

solution

1、答案

  • 无序划分n个数为k份且不重复,等价于求方程(x1+x2+x3+…xk=n且1<=x1<=x2<=…xk)的解的个数。(x为每份的值)
  • 搜索的方法是依次枚举x1,x2,x3…xk。复杂度O(n^k),直接上天。

2、剪枝

  • 可行性剪枝(分支无法到达递归边界,远远的看到前方是死胡同,得不到答案):未到第k份n就被分完了,n<=0时,return;
  • 上下界剪枝(也是可行性的一种,限制范围是区间):考虑约束条件
    1、下界:由于分解不考虑顺序,我们设分解数依次递增,所以拓展节点时的下界应该不小于前一个节点的值,即a[i-1]<=a[i]。(这样还可以避免重复,直接起到判重的作用)【就是大于前一个数】
    2、上界:假设我们已经将n分成了a[1]+a[2]+…a[i-1]份,则a[i]的最大值为i-k这k-i+1份的平均划分(因为后面都>=a[i]啊,最好的结果就是都等于)。即设剩余数大小为m=n-(a[1]+a[2]+..a[i-1]),就有a[i]<=m/(k-i+1)。 【其实就是剩余数总大小除以剩余的份数,平均值就是最大值。】

复杂度能AC。

codes

#include<iostream>
using namespace std;
int n, m, a[8], sum;
void dfs(int k){//分第k份if(n == 0)return ;//可行性剪枝,分不到n份了if(k == m){if(n >= a[k-1])sum++;//严格递增,不然判重炸锅return ;}for(int i = a[k-1]; i <= n/(m-k+1); i++){//上下界a[k] = i; //第k份的值n -= i;//不用全局也可以加参数dfs(k+1);n += i;}
}
int main(){cin>>n>>m;a[0] = 1;//每份不能为空:第一份(最小的)要>=1dfs(1);cout<<sum<<'\n';return 0;
}

【NOIP2001】【Luogu1025】数的划分(可行性剪枝,上下界剪枝)相关推荐

  1. ALGO-22 数的划分(DFS,经典剪枝)

    ALGO-22 数的划分 时间限制: 1 Sec 内存限制: 128 MB 题目描述 将整数n分成k份,且每份不能为空,任意两份不能相同(不考虑顺序). 例如:n=7,k=3,下面三种分法被认为是相同 ...

  2. 数的划分(信息学奥赛一本通-T1440)

    [题目描述] 将整数n分成k份,且每份不能为空,任意两份不能相同(不考虑顺序). 例如:n=7,k=3,下面三种分法被认为是相同的. 1,1,5: 1,5,1: 5,1,1: 问有多少种不同的分法. ...

  3. 深度搜索剪枝——数的划分

    [题目描述]将整数n分成k份,且每份不能为空,问有多少种分法? [输入格式]两个整数n,m(6<n<=200,2<=m<=6) [输出格式]输出不同的分法数 [样例输入]7 3 ...

  4. noi.openjudge_P8787数的划分

    题目: 8787:数的划分 总时间限制: 1000ms 内存限制: 65536kB 描述 将整数n分成k份,且每份不能为空,任意两份不能相同(不考虑顺序).例如:n=7,k=3,下面三种分法被认为是相 ...

  5. 2021上海高考小三门成绩查询,2021上海高考等级考分数怎么划分等级的

    上海新高考3+3模式,与从前相比新增了一个等级考的概念.那么很多考生不知道上海高考等级考分数怎么划分等级的,下面一起带大家来看看. 关于等级考 改革之后的上海高考,统一考试的科目为: 大三门:语文.数 ...

  6. 蓝桥杯算法训练合集八 1.数的划分2.求先序排列3.平方计算4.三角形高5.单词复数

    目录 1.数的划分 2.求先序排列 3.平方计算 4.三角形高 5.单词复数 1.数的划分 问题描述 将整数n分成k份,且每份不能为空,任意两份不能相同(不考虑顺序). 例如:n=7,k=3,下面三种 ...

  7. 2001年 数的划分

    数的划分 题目描述 将整数n分成k份,且每份不能为空,任意两种划分方案不能相同(不考虑顺序). 例如:n=7,k=3,下面三种划分方案被认为是相同的. 1 1 5 1 5 1 5 1 1 问有多少种不 ...

  8. 【组合数学】组合数学简介 ( 组合思想 3 : 上下界逼近 | 上下界逼近示例 Remsey 数 )

    文章目录 一.组合思想 3 : 上下界逼近 二.上下界逼近示例 ( Remsey 数 ) 一.组合思想 3 : 上下界逼近 上下界逼近 的思想 , 通常用于 确定某个值 , 或 确定某个函数的阶 ( ...

  9. 近世代数--整环上的唯一分解问题--相伴是整环上的等价关系,最大公因子建立在相伴所划分的等价类上

    近世代数--整环上的唯一分解问题--相伴是整环上的等价关系,最大公因子建立在相伴所划分的等价类上 相伴是整环上的等价关系 最大公因子建立在相伴所划分的等价类上 整除 最大公因子 博主是初学近世代数(群 ...

最新文章

  1. Linux 虚拟内存和物理内存的理解【转】
  2. 靠脑机接口“隔空探物”,大脑植入芯片可实现“心灵感应”
  3. Spring Boot 2.x整合Websocket(基于Spring Boot 2.x 前后端分离 iview admin vue 集成activiti工作流...
  4. deeplearning URL
  5. linux中fork, source和exec的区别
  6. [译] 提高日志质量的 5 大技巧
  7. Mac环境下安装Sass
  8. ActionTileViewController.js
  9. 最新PHP秒赞,快乐秒赞 php版
  10. Python中正则表达式讲解
  11. 【Git、GitHub、GitLab】七 git中分支的删除以及出现分离头指针的情况
  12. java填空题答案_java练习题附选择填空答案
  13. C语言 IDE的介绍及安装
  14. Java概述、Jdk的安装、关键字
  15. python 正则表达式 sub_Python 正则表达式:sub
  16. 脚本案例互联网赚钱怎么赚钱?一切都需要引流脚本
  17. Qt quick 示例:推特搜索小程序开发
  18. FFmpeg问题梳理
  19. 百度云高速下载Pandownload
  20. 小米官网——简单产品模块布局实现

热门文章

  1. 面向项目(六)—— 错误(异常)信息的书写
  2. utilities(C++)——单例(Singleton)
  3. matplotlib 可视化细节,丰富的可选参数
  4. Python基础——@staticmethod与@classmethod
  5. python入门指南by-Python 入门指南
  6. 盘点语音识别技术在人工智能中的应用
  7. 谷歌语音识别功能Live Transcribe,让AI帮助语言障碍者“说话”
  8. oracle 每分钟执行,CSS_ORACLE JOB INTERVAL参数设置, 1:每分钟执行nb - phpStudy
  9. SpringCloud--GateWay搭建及路由转发规则介绍
  10. 笔记本重新启动计算机,为什么笔记本电脑突然重新启动_计算机的基本知识_IT /计算机_信息...