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

数的划分(dfs)

题目描述

将整数 n 分成 k 份,且每份不能为空,任意两个方案不相同(不考虑顺序)。

例如:n=7,k=3,下面三种分法被认为是相同的。

1,1,5;
1,5,1;
5,1,1.

问有多少种不同的分法。

输入格式

n,k (6<n≤200,2≤k≤6)

输出格式

1 个整数,即不同的分法。

输入输出样例

输入 #1复制

7 3

输出 #1复制

4

说明/提示

四种分法为:
1,1,5;
1,2,4;
1,3,3;
2,2,3.

【题目来源】

NOIP 2001 提高组第二题

#include<bits/stdc++.h>
using namespace std;

int n,k;
int ans;
int sum;//保存已经搜索到的数的和

void dfs(int x,int dep){
	if(dep==k-1){ //当深度达到 k-1 时就不用搜了 因为最后一个值已经确定了
		ans++;
		return;
	}
	sum+=x;
	for(int i=x;i<=(n-sum)/(k-dep);i++){ //i 的值应该大于等于他的上一个数,小于等于 剩余的数/剩余的数量(向下取整)
		dfs(i,dep+1);
	}
	sum-=x;//恢复原状态
}

int main(){
	cin>>n>>k;
	for(int i=1;i<=n/k;i++){
		sum=0;//每次对一个新的数进行 dfs 之前,先清空 sum
		dfs(i,1);
	}
	cout<<ans<<endl;
	return 0;
} 	

相关文章:

  • OpenCV图像拼接项目指南
  • 健康养生:铺就活力生活之路
  • CMake-环境变量介绍
  • 第42章:Secret管理与敏感信息保护
  • 2.go基础语法
  • wpf 后台使用图标字体
  • 快速创建 Java 8 兼容的 Spring Boot 项目(阿里云脚手架)
  • 【模拟面试】计算机考研复试集训(第十三天)
  • wordpress主题使用中常见错误汇总
  • 第二十一章:模板与继承_《C++ Templates》notes
  • MyBatis-Plus(Ⅱ)基本CRUD
  • 用户模块——升级swagger文档更漂亮
  • Git的认识安装及创建配置本地仓库
  • Shebang行的写入
  • qt 对QObject::tr()函数进行重定向
  • 【工程实践/源码阅读】批量文件处理步骤以及如何并行处理
  • Ubuntu下用QEMU模拟运行OpenBMC
  • 解决address already in use报错:如何查看占用某个端口的程序并杀死
  • 【uni-app】引用公共组件
  • 数据预处理流程与关键步骤解析
  • 增诉滥用职权罪,尹锡悦遭韩国检方追加起诉
  • 李公明︱一周书记:数字文化的乌托邦精神与……算法时代的生存指南
  • 七部门联合发布《终端设备直连卫星服务管理规定》
  • 平安资管总经理罗水权因个人工作原因辞职
  • 中央网信办部署开展“清朗·整治AI技术滥用”专项行动
  • 屠呦呦当选美国科学院外籍院士