【枚举暴搜】【NOIP2001】数的划分
来源:互联网 发布:python in用法 编辑:程序博客网 时间:2024/06/01 09:36
第二题:数的划分
(p2.pas/c/cpp p2.in p2.out)
问题描述
将整数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;}
题目范围很小,深搜可以轻松过
主要是判重,方法有两种
①类似字符串检索,每求出一种方案就将其排序,然后判重用hash就很方便了,但是时间不理想
②枚举的时候不用从1~n,只需从上一个a[i-1]~n即可,就可以保证不重复,如果后面有小的,那么前面必定有和它重复的答案
C++ Code
#include<cstdio>#include<string>using namespace std;int n,k,ways=0;int a[300]={0};bool h[9999999];void fen(int i,int sum){ if(i==k)//这里直接判断最后一个是否大于等于其前面一个即可 少递归一次 不然要超时! { if(a[i-1]<=n-sum)ways++; return; } int j; if(sum==n)return; for(j=a[i-1];j<=n-sum;j++) { if(j<1)continue; a[i]=j; fen(i+1,sum+j); }}int main(){ freopen("p2.in","r",stdin); freopen("p2.out","w",stdout); scanf("%d%d",&n,&k); fen(1,0); printf("%d",ways); return 0;}
- 【枚举暴搜】【NOIP2001】数的划分
- [NOIP2001]数的划分
- NOIP2001数的划分
- 【noip2001】数的划分
- NOIP2001 数的划分
- 数的划分(NOIP2001)
- 【NOIP2001】数的划分
- noip2001 数的划分
- 数的划分 noip2001
- noip2001 数的划分 (动态规划)
- noip2001-数的划分 2008.11.5
- 洛谷 P1025 [NOIP2001 T2] 数的划分
- NOIP2001普及组 数的划分
- NOIP2001提高组 数的划分
- 洛谷 1025 [NOIP2001] 数的划分
- ACM 93. [NOIP2001] 数的划分(dp+组合数学)
- 【NOIP2001提高组T2】数的划分-DP
- 数的划分(NOIP2001&水题测试2017082401)
- 【模拟】【打表】无聊的游戏
- 【动规递推】暴走的猴子
- java基础
- 【最短路】【NOIP2001】CAR的旅行路线
- 【动规递推】【NOIP2001】统计单词个数
- 【枚举暴搜】【NOIP2001】数的划分
- struts2中s:iterator 标签的使用详解 及 OGNL用法
- 【枚举暴搜】【NOIP2001】一元三次方程求解
- 【深搜】【加法与乘法原理】【JSOI2007夏令营考试】游览(c.pas/c/cpp)
- 【动规】【JSOI2007夏令营考试】考验(b.pas/c/cpp)
- 【遍历染色】【JSOI2007夏令营考试】入门(a.pas/c/cpp)
- 写在前面
- 【记忆化】能量项链(energy.pas/c/cpp)
- 【记忆化】滑雪(ski.pas/c/cpp)