zoukankan      html  css  js  c++  java
  • C语言 · 数的划分

    算法提高 数的划分  
    时间限制:1.0s   内存限制:256.0MB
        
    问题描述
      一个正整数可以划分为多个正整数的和,比如n=3时:
      3;1+2;1+1+1;
      共有三种划分方法。
      给出一个正整数,问有多少种划分方法。
    输入格式
      一个正整数n
    输出格式
      一个正整数,表示划分方案数
    样例输入
    3
    样例输出
    3
    数据规模和约定
      n<=100
     
    作者注释:递归问题。(本题运行超时)

      step表示当前剩余的数需要分成的份数;把n分成k份,
    只需第一个数等于i,计算从i等于1一直到i等于n/k,然后
    把剩余的n-i分成k-1份的种类数.
      front为剩余的要划分的数的前一个数,每次i从front
    开始一直到n/step结束,这样才能保证得到的划分方式是
    不递减的,才能保证不会有重复的情况产生.

     1 #include<stdio.h> 
     2 #include<string.h>
     3 int ans=0;
     4 void dfs(int front, int n, int step){
     5     if(step==1){
     6         ans++;
     7         return;
     8     }
     9     for(int i=front; i<=n/step; i++){
    10         dfs(i, n-i, step-1);
    11     }
    12 }
    13 int main(){
    14     int n;
    15     scanf("%d",&n);
    16     for(int i=1;i<=n;i++){
    17         dfs(1,n,i);
    18     }
    19     printf("%d",ans);
    20     return 0;
    21 }
  • 相关阅读:
    队列与双向队列

    linux nohup, jobs, fg, tail指令 指令前后台切换
    linux shell
    Linux学习笔记四 grep, sed, awk
    面试要求
    jenkins send files or publish
    mysql导入脚本
    第三方接口调用框架
    pdm文件name与comment互相同步
  • 原文地址:https://www.cnblogs.com/panweiwei/p/6666993.html
Copyright © 2011-2022 走看看