zoukankan      html  css  js  c++  java
  • P1025 数的划分

    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;

    搜索

     1 #include<cstdio>
     2 #include<iostream>
     3 
     4 using namespace std;
     5 
     6 const int N = 210;
     7 
     8 int n,m;
     9 int dfs(int x,int mx,int sum) { // 已经搜索了x个,最大的是mx,和是sum
    10     if (x > m || sum >= n) return 0;
    11     if (x == m-1) {
    12         if (n - sum >= mx) return 1;
    13         return 0;
    14     }
    15     int ans = 0;
    16     for (int i=mx; i<=n-sum; ++i) { // 这个优化很重要!!!
    17         ans += dfs(x+1,i,sum+i);
    18     }
    19     return ans;
    20 }
    21 int main() {
    22     cin>>n>>m;
    23     cout<<dfs(0,1,0);
    24     return 0;
    25 } 
  • 相关阅读:
    文件操作
    字典的相关函数
    列表相关操作/列表的相关函数
    字符串相关操作/字符串相关函数
    局部变量 与 全局变量
    函数名的使用
    函数的返回值 return
    命名关键字
    收集参数
    默认形参 与 关键字实参的区别
  • 原文地址:https://www.cnblogs.com/mjtcn/p/6895391.html
Copyright © 2011-2022 走看看