zoukankan      html  css  js  c++  java
  • 洛谷 P1025 【数的划分】

    进入正题

    思路:递归

    这道题有点像放苹果:

    把M个同样的苹果放在N个同样的盘子里,允许有的盘子空着不放,问共有多少种不同的分发(5,1,1和1,1,5是同一种方法)

    转化一下就有:
    把n个苹果放在k个盘子里,每个盘子都不空.

    那么这样就好理解,可以先把每一个盘子都放上苹果,注意是每一个盘子,所以开始递归时从(n - k)开始,盘子数还是k;

    接下来就是递归里面了

    1.如果苹果为0,那么就返回1,就算上一次的方案完成,有了1个方案;

    2.如果只有一个盘子了,那么肯定把剩下所有的都放进去,所有又1个方案;

    3.如果没盘子了那还放个** , 只能返回0;

    4.如果苹果还没盘子多,其余的盘子就可以直接砸了不放了,盘子递归苹果 数就ok了;

    5.如果以上都不满足那么就可以考虑两种递归:

      A.少一个盘子,苹果数不变
      B.所有盘子都放一个,盘子数不变,苹果减少
    

    献上代码

    #include <bits/stdc++.h>
    using namespace std;
    int n , k;
    int g(int x , int y){
    	if(x == 0) return 1;
    	if(y == 1) return 1;
    	if(y == 0) return 0;
    	if(x < y) return g(x , x);
    	return g(x - y , y) + g(x , y - 1); 
    }
    int main(){
    	cin >> n >> k;
    	cout << g(n - k , k);
    	return 0;
    }
    
  • 相关阅读:
    Windows10如何添加开机启动项
    selenium自动化文件上传、文件下载
    windows下创建虚拟环境
    selenium 处理js日历控件
    selenium鼠标和键盘事件
    selenium绕过某宝验证,手动验证滑块
    python国内镜像源
    Linux下jenking安装
    发送邮件
    基于python的selenium两种文件上传操作
  • 原文地址:https://www.cnblogs.com/bzzs/p/13132075.html
Copyright © 2011-2022 走看看