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

和递推差不多就不写了

【dfs】p1025 数的划分的更多相关文章

  1. 洛谷——P1025 数的划分

    P1025 数的划分 题目描述 将整数n分成k份,且每份不能为空,任意两个方案不相同(不考虑顺序). 例如:n=7,k=3,下面三种分法被认为是相同的. 1,1,5; 1,5,1; 5,1,1; 问有 ...

  2. P1025 数的划分——简单题刷傻系列

    P1025 数的划分 学傻了,学傻了,什么dp搜索什么啊: #include<cstdio> #include<cstring> #include<algorithm&g ...

  3. P1025数的划分

    P1025数的划分 #include <iostream> using namespace std; int n,k; int cnt; void dfs(int s,int step,i ...

  4. P1025 数的划分

    P1025 数的划分f[i][j]表示把数i分成j份的方案数,分成两种情况,第一种是最小值是1,另一种是最小值不是1,对于不是1的情况,先都放一个1,那么f[i][j]=f[i-1][j-1]+f[i ...

  5. P1025 数的划分 dfs dp

    题目描述 将整数nn分成kk份,且每份不能为空,任意两个方案不相同(不考虑顺序). 例如:n=7n=7,k=3k=3,下面三种分法被认为是相同的. 1,1,51,1,5;1,5,11,5,1;5,1, ...

  6. luogu P1025 数的划分

    https://www.luogu.org/problem/show?pid=1025 n的k划分 且不出现划分成0的情况  可以 分为两种情况 所有划分的数 都大于1的情况 至少划分的数里面有1的情 ...

  7. [NOIP2001] 提高组 洛谷P1025 数的划分

    题目描述 将整数n分成k份,且每份不能为空,任意两个方案不相同(不考虑顺序). 例如:n=7,k=3,下面三种分法被认为是相同的. 1,1,5; 1,5,1; 5,1,1; 问有多少种不同的分法. 输 ...

  8. 洛谷P1025 数的划分【dp】

    将整数nn分成kk份,且每份不能为空,任意两个方案不相同(不考虑顺序). 例如:n=7n=7,k=3k=3,下面三种分法被认为是相同的. 1,1,51,1,5; 1,5,11,5,1; 5,1,15, ...

  9. nbuoj 2080 洛谷p1025 数的划分

    链接:http://www.nbuoj.com/v8.83/Problems/Problem.php?pid=2820 链接:https://www.luogu.org/problem/P1025 题 ...

随机推荐

  1. Golang的类型断言

    类型断言即判断一个变量是不是某个类型的实例,这个经常用在判断接口的类型,基本的格式: y, ok := x.(type) 上面的语句用于判断变量x是不是type类型,有两种结果: x是type类型的变 ...

  2. 【问题解决方案】本地代码文件上传到GitHub里中文乱码问题

    刚刚学完Git并试着上传了我的化石Java代码到远程库,表面一切和谐,然而.. 真让人大惊失色.. step1-检查浏览器是否是utf-8(谷歌默认是) step2-在本地编辑器设置 (按理说,not ...

  3. 数组建 BST

    #include <bits/stdc++.h> using namespace std; const int maxn = 1e5 + 10; int N, root = 1; int ...

  4. Python3练习题求1000以内所有3和5的倍数的总和

    sum = 0 for i in range(1,1000):     if i%3 == 0 or i%5 == 0:         sum += i print(sum)

  5. Errors running builder 'DeploymentBuilder' on project

    Errors running builder 'DeploymentBuilder' on project 1.修改java源代码后点击保存,IDE 自动编译并热部署,提示如下错误: Errors o ...

  6. [转帖]firewall-cmd

    firewall-cmd https://wangchujiang.com/linux-command/c/firewall-cmd.html 高手大作 等哪天需要防火墙了 再练习一下. Linux上 ...

  7. Git SSH公钥配置

    https://www.cnblogs.com/smuxiaolei/p/7484678.html https://blog.csdn.net/weixin_42063071/article/deta ...

  8. 剑指offer(16)栈的压入、弹出序列

    题目: 输入两个整数序列,第一个序列表示栈的压入顺序,请判断第二个序列是否可能为该栈的弹出顺序.假设压入栈的所有数字均不相等.例如序列1,2,3,4,5是某栈的压入顺序,序列4,5,3,2,1是该压栈 ...

  9. spring boot中常用的配置文件的重写

    @Configuration public class viewConfigSolver extends WebMvcConfigurerAdapter { /* spring boot 已经自动配置 ...

  10. 爬虫实战——Scrapy爬取伯乐在线所有文章

    Scrapy简单介绍及爬取伯乐在线所有文章 一.简说安装相关环境及依赖包 1.安装Python(2或3都行,我这里用的是3) 2.虚拟环境搭建: 依赖包:virtualenv,virtualenvwr ...