【dfs】p1025 数的划分
P1025 数的划分
题目描述
将整数n分成k份,且每份不能为空,任意两个方案不相同(不考虑顺序)。
例如:n=7,k=3,下面三种分法被认为是相同的。
1,1,5; 1,5,1; 5,1,1;
问有多少种不同的分法。
输入输出格式
输入格式:
n,k (6<n<=200,2<=k<=6)
输出格式:
一个整数,即不同的分法。
输入输出样例
7 3
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
和递推差不多就不写了
【dfs】p1025 数的划分的更多相关文章
- 洛谷——P1025 数的划分
P1025 数的划分 题目描述 将整数n分成k份,且每份不能为空,任意两个方案不相同(不考虑顺序). 例如:n=7,k=3,下面三种分法被认为是相同的. 1,1,5; 1,5,1; 5,1,1; 问有 ...
- P1025 数的划分——简单题刷傻系列
P1025 数的划分 学傻了,学傻了,什么dp搜索什么啊: #include<cstdio> #include<cstring> #include<algorithm&g ...
- P1025数的划分
P1025数的划分 #include <iostream> using namespace std; int n,k; int cnt; void dfs(int s,int step,i ...
- P1025 数的划分
P1025 数的划分f[i][j]表示把数i分成j份的方案数,分成两种情况,第一种是最小值是1,另一种是最小值不是1,对于不是1的情况,先都放一个1,那么f[i][j]=f[i-1][j-1]+f[i ...
- P1025 数的划分 dfs dp
题目描述 将整数nn分成kk份,且每份不能为空,任意两个方案不相同(不考虑顺序). 例如:n=7n=7,k=3k=3,下面三种分法被认为是相同的. 1,1,51,1,5;1,5,11,5,1;5,1, ...
- luogu P1025 数的划分
https://www.luogu.org/problem/show?pid=1025 n的k划分 且不出现划分成0的情况 可以 分为两种情况 所有划分的数 都大于1的情况 至少划分的数里面有1的情 ...
- [NOIP2001] 提高组 洛谷P1025 数的划分
题目描述 将整数n分成k份,且每份不能为空,任意两个方案不相同(不考虑顺序). 例如:n=7,k=3,下面三种分法被认为是相同的. 1,1,5; 1,5,1; 5,1,1; 问有多少种不同的分法. 输 ...
- 洛谷P1025 数的划分【dp】
将整数nn分成kk份,且每份不能为空,任意两个方案不相同(不考虑顺序). 例如:n=7n=7,k=3k=3,下面三种分法被认为是相同的. 1,1,51,1,5; 1,5,11,5,1; 5,1,15, ...
- nbuoj 2080 洛谷p1025 数的划分
链接:http://www.nbuoj.com/v8.83/Problems/Problem.php?pid=2820 链接:https://www.luogu.org/problem/P1025 题 ...
随机推荐
- Column 'parent_id' specified twice
Hibernate Column 'parent_id' specified twice问题解决--insertable = false, updatable = false的使用 - shendeg ...
- [转帖]BRD、MRD 和 PRD
来源: https://www.zhihu.com/question/19655491 BRD 商业需求文档 Business Requirement Document MRD 市场需求文档 Mark ...
- Oracle可视化工具PL/SQL Developer的安装与配置
安装程序: 安装目录不能有中文和空格,否则无法进行远程连接. 推荐使用 D:\PLSQLDeveloper 为安装目录 破解PLSQLDeveloper 使用工具 PLSQL Developer10. ...
- CentOS7安装k8s
借鉴博客:https://www.cnblogs.com/xkops/p/6169034.html 此博客里面有每个k8s配置文件的注释:https://blog.csdn.net/qq_359048 ...
- select、poll、epoll之间的区别(搜狗面试)
(1)select==>时间复杂度O(n) 它仅仅知道了,有I/O事件发生了,却并不知道是哪那几个流(可能有一个,多个,甚至全部),我们只能无差别轮询所有流,找出能读出数据,或者写入数据的流,对 ...
- nginx反向代理proxy_pass的问题
起因:今天企业部署一个项目,用的nginx做的反向代理,配置如下: 测试结果令人失望,IP:端口 能访问项目,域名:端口 也能访问 ,但是 域名/接口名 访问失败 ################## ...
- Delphi数据集与记录
1.1Delphi数据库应用程序的层次结构 Delphi数据库应用程序通过数据存取构件对数据库进行访问,通过可视的数据构件(Data Control)将数据呈现给用户,并与用户进行交互.Delphi数 ...
- 在线制作css动画——CSS animate
熟悉CSS的人都知道,CSS可以实现很多漂亮的动画,特别是它的在线功能,能够帮助人们解决很多制作动画的效果.今天特别推荐一个在线CSS插件功能——cssanimate,这个最大的特色就是以图形界面方式 ...
- codeforces347B
Fixed Points CodeForces - 347B A permutation of length n is an integer sequence such that each integ ...
- poj-2406(kmp水题)
题意:定义一个a*b=字符串a连接字符串b:给你一个字符串s,问你这个字符串最多能用多少个字符串t连接得到:例如:aaaa=4个a构成: 解题思路:kmp水题,next数组除了查找字串以外最广泛的一种 ...