整数划分问题和集合划分问题的区别

整数划分

#include <iostream>

using namespace std;
int f(int n,int m)
{
    if(n==0 || m==1)
        return 1;
    if(n<m)
        return f(n,n);
    else
        return f(n,m-1) + f(n-m,m);

}
int main()
{
    ios::sync_with_stdio(0);
    int num;
    cin>>num;
    for(int i=1;i<=num;++i)
    {
        int n,m;
        cin>>n>>m;
        cout<<f(n,m)<<endl;

    }
    return 0;
}

集合划分

#include <iostream>

using namespace std;

int f(int n, int m)
{
    if(n==m || m==1)
        return 1;
    return f(n-1,m-1) + m*f(n-1,m);
}

int main()
{
    int sum = 0;
    int n,m;
    cin>>n>>m;
    for(int i=1; i<=m; i++)
        sum += f(n,i);
    cout<<sum;
    return 0;
}

区别:

举个通俗易懂的例子,

  • 整数划分问题就等同于将n个一模一样的糖果🍬放在m个相同的盘子中,有多少种放法,允许盘子有空余,但不允许没放完。
  • 而集合划分就等同于将n个彼此互不相同的糖果🍬🍭🎂(因为集合中的元素不允许重复)放在m个相同的盘子中,有多少种放法,同样允许盘子空余,不允许放不完。
展开阅读全文

Windows版YOLOv4目标检测实战:训练自己的数据集

04-26
©️2020 CSDN 皮肤主题: 书香水墨 设计师: CSDN官方博客 返回首页
实付0元
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、C币套餐、付费专栏及课程。

余额充值