【dfs】p1025 数的划分
2024-10-16 21:28:28
P1025 数的划分
题目描述
将整数n分成k份,且每份不能为空,任意两个方案不相同(不考虑顺序)。
例如:n=7,k=3,下面三种分法被认为是相同的。
1,1,5; 1,5,1; 5,1,1;
问有多少种不同的分法。
输入输出格式
输入格式:
n,k (6<n<=200,2<=k<=6)
输出格式:
一个整数,即不同的分法。
输入输出样例
输入样例#1:
7 3
输出样例#1:
4
说明
四种分法为:1,1,5;1,2,4;1,3,3;2,2,3;
noip2001年提高组第二题
思路:
一.dfs:直接跑dfs
不剪枝的版本:
#include"bits/stdc++.h" using namespace std; ]= {},n,k,tot=; inline void dfs(int s,int t) { //s是拆分的数,t是拆分了几个数 if(t>k) return;//如果t比拆分的长度大,直接跳出。 ]; i<=s; i++) //进行拆分。 if(i<n) { a[t]=i;//保存拆分的数 s-=i;//减去拆分的数 &&t==k) tot++;//如果拆分完成并且符合长度时,total就加一 ); s+=i;//进行回溯 } } int main() { cin>>n>>k; dfs(n,); cout<<tot; ; } //感谢lyq大佬提供代码 @lyq您真是吊打我
额....838ms,这也太慢了吧!
你们这是什么dfs啊!你们害人不浅啊!
剪枝版本:
原理:
1.按分解的数递增排列
2.上限为a[i]<=m/(k-i+1)
#include<iostream> #include<cstdio> #include<algorithm> #include<cmath> #include<queue> #include<stack> #include<vector> #include<map> #include<string> #include<cstring> using namespace std; ; ; inline int read() { char c = getchar(); , f = ; ') { ; c = getchar(); } + c - ', c = getchar(); return x * f; } ],ans,m; void dfs(int k) { ) return; if(k==m) { ]) { ans++; } return; } ]; i<=n/(m-k+); i++) { a[k]=i; n-=i; dfs(k+); n+=i; } } int main() { cin>>n>>m; a[]=;//设置初始化条件 dfs();//进行搜索 cout<<ans; ; }
优化不少吧!我会在下一篇文章里写一下剪枝(原谅我太垃圾了)
二.递推
#include<iostream> #include<cstdio> #include<algorithm> #include<cmath> #include<queue> #include<stack> #include<vector> #include<map> #include<string> #include<cstring> using namespace std; ; ; inline int read() { , f = ; ; c = getchar();} + c - ', c = getchar(); return x * f; } int dt(int n, int k) { ; //如果n<k 肯定不可能每个盒子都有 ; //盒子和小球数相等 每个盒子里一个小球 ) ; //盒子只有一个时候 把剩下小球都放进去 , k-) + dt(n-k, k); } int main() { int n=read(), k=read(); printf("%d", dt(n, k)); ; } //递推做法
其实和放小球的题一样了....
速度和剪枝差不多,不过好想多了,嘻嘻嘻嘻(可能是我太菜了)
二.dp
和递推差不多就不写了
最新文章
- 创建cocos项目并打包
- IE6 IE7 ‘JSON’ 未定义
- for循环的时候是按照数字递增会造成一些元素被遗漏
- 开发环境安装 Java Mysql MyEclipse Android Adt
- 关于oracle中传过来的一个多id需要插入到数据库用,分格的存储过程
- 当try和finally里都有return时,会忽略try的return,而使用finally的return
- 注意事项: Solr设备 Hello World
- WCF小实例以及三种宿主
- 一步一步深入spring(7)-- 整合spring和JDBC的环境
- yii2图片验证码
- Webpack 2 视频教程 013 - 自动分离 CSS 到独立文件
- h5适配的解决方案
- 一HTML基础知识
- Flask路由报错:raise FormDataRoutingRedirect(request)
- Git学习笔记05-撤销修改
- 【sping揭秘】18、使用spring访问数据
- 快速安装elkstack
- mysql中的 随机字符串的生成
- android 获取 imei号码
- IOS设计模式第八篇之键值观察模式
热门文章
- 解决ConnectionRefusedError: [WinError 10061] 由于目标计算机积极拒绝,无法连接。
- 基于CRM跟进(活动)记录中关键字识别的客户跟进加权值的成单概率算法
- Jenkins Installing and migration
- nodejs配置nginx 以后链接mongodb数据库
- CLOUD SQL跟踪
- Python Note1: Pycharm的安装与使用
- 阿里云ECS服务器,CentOS 7.4配置jdk+tomcat+mysql
- SpringBoot之通过yaml绑定注入数据
- 循环神经网络RNN及LSTM
- tomcat 和jboss区别