【NOIP2001】【Luogu1025】数的划分(可行性剪枝,上下界剪枝)
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】数的划分(可行性剪枝,上下界剪枝)相关推荐
- ALGO-22 数的划分(DFS,经典剪枝)
ALGO-22 数的划分 时间限制: 1 Sec 内存限制: 128 MB 题目描述 将整数n分成k份,且每份不能为空,任意两份不能相同(不考虑顺序). 例如:n=7,k=3,下面三种分法被认为是相同 ...
- 数的划分(信息学奥赛一本通-T1440)
[题目描述] 将整数n分成k份,且每份不能为空,任意两份不能相同(不考虑顺序). 例如:n=7,k=3,下面三种分法被认为是相同的. 1,1,5: 1,5,1: 5,1,1: 问有多少种不同的分法. ...
- 深度搜索剪枝——数的划分
[题目描述]将整数n分成k份,且每份不能为空,问有多少种分法? [输入格式]两个整数n,m(6<n<=200,2<=m<=6) [输出格式]输出不同的分法数 [样例输入]7 3 ...
- noi.openjudge_P8787数的划分
题目: 8787:数的划分 总时间限制: 1000ms 内存限制: 65536kB 描述 将整数n分成k份,且每份不能为空,任意两份不能相同(不考虑顺序).例如:n=7,k=3,下面三种分法被认为是相 ...
- 2021上海高考小三门成绩查询,2021上海高考等级考分数怎么划分等级的
上海新高考3+3模式,与从前相比新增了一个等级考的概念.那么很多考生不知道上海高考等级考分数怎么划分等级的,下面一起带大家来看看. 关于等级考 改革之后的上海高考,统一考试的科目为: 大三门:语文.数 ...
- 蓝桥杯算法训练合集八 1.数的划分2.求先序排列3.平方计算4.三角形高5.单词复数
目录 1.数的划分 2.求先序排列 3.平方计算 4.三角形高 5.单词复数 1.数的划分 问题描述 将整数n分成k份,且每份不能为空,任意两份不能相同(不考虑顺序). 例如:n=7,k=3,下面三种 ...
- 2001年 数的划分
数的划分 题目描述 将整数n分成k份,且每份不能为空,任意两种划分方案不能相同(不考虑顺序). 例如:n=7,k=3,下面三种划分方案被认为是相同的. 1 1 5 1 5 1 5 1 1 问有多少种不 ...
- 【组合数学】组合数学简介 ( 组合思想 3 : 上下界逼近 | 上下界逼近示例 Remsey 数 )
文章目录 一.组合思想 3 : 上下界逼近 二.上下界逼近示例 ( Remsey 数 ) 一.组合思想 3 : 上下界逼近 上下界逼近 的思想 , 通常用于 确定某个值 , 或 确定某个函数的阶 ( ...
- 近世代数--整环上的唯一分解问题--相伴是整环上的等价关系,最大公因子建立在相伴所划分的等价类上
近世代数--整环上的唯一分解问题--相伴是整环上的等价关系,最大公因子建立在相伴所划分的等价类上 相伴是整环上的等价关系 最大公因子建立在相伴所划分的等价类上 整除 最大公因子 博主是初学近世代数(群 ...
最新文章
- Linux 虚拟内存和物理内存的理解【转】
- 靠脑机接口“隔空探物”,大脑植入芯片可实现“心灵感应”
- Spring Boot 2.x整合Websocket(基于Spring Boot 2.x 前后端分离 iview admin vue 集成activiti工作流...
- deeplearning URL
- linux中fork, source和exec的区别
- [译] 提高日志质量的 5 大技巧
- Mac环境下安装Sass
- ActionTileViewController.js
- 最新PHP秒赞,快乐秒赞 php版
- Python中正则表达式讲解
- 【Git、GitHub、GitLab】七 git中分支的删除以及出现分离头指针的情况
- java填空题答案_java练习题附选择填空答案
- C语言 IDE的介绍及安装
- Java概述、Jdk的安装、关键字
- python 正则表达式 sub_Python 正则表达式:sub
- 脚本案例互联网赚钱怎么赚钱?一切都需要引流脚本
- Qt quick 示例:推特搜索小程序开发
- FFmpeg问题梳理
- 百度云高速下载Pandownload
- 小米官网——简单产品模块布局实现
热门文章
- 面向项目(六)—— 错误(异常)信息的书写
- utilities(C++)——单例(Singleton)
- matplotlib 可视化细节,丰富的可选参数
- Python基础——@staticmethod与@classmethod
- python入门指南by-Python 入门指南
- 盘点语音识别技术在人工智能中的应用
- 谷歌语音识别功能Live Transcribe,让AI帮助语言障碍者“说话”
- oracle 每分钟执行,CSS_ORACLE JOB INTERVAL参数设置, 1:每分钟执行nb - phpStudy
- SpringCloud--GateWay搭建及路由转发规则介绍
- 笔记本重新启动计算机,为什么笔记本电脑突然重新启动_计算机的基本知识_IT /计算机_信息...