正在载入在线练习界面,本页内容可直接阅读…

AK CSP › NOIP 普及 2017 第一轮真题 › 第 24 题

NOIP 普及 2017 第一轮 第 24 题:递归函数 g 计算非降分拆方案数

阅读程序 · 组合计数(离散与组合数学) · 难度 中等 · 答案 8

题目

```
#include<iostream>
using namespace std;
int g(int m, int n, int x)
{
    int ans = 0;
    int i;
    if (n == 1)
        return 1;
    for (i = x; i <= m / n; i++)
        ans += g(m - i, n - 1, i);
    return ans;
}
int main()
{
    int t, m, n;
    cin >> m >> n;
    cout << g(m, n, 0) << endl;
    return 0;
}

```
输入:7 3    
输出:_________
NOIP 普及 2017 第一轮 第 24 题 原题
原题扫描(页面加载后可直接在线作答)

本小题

阅读程序写结果:

答案

8

题解

考点定位

非递减非负整数拆分。

解题过程

实际输入为 7 3,调用 g(7,3,0)。参数 x 限制下一项不小于上一项,因此程序计数的是把 7 拆成 3 个非递减非负整数的方案。

首项只可能为 0、1、2,逐项列出:

  • 首项 0:(0,0,7)、(0,1,6)、(0,2,5)、(0,3,4),共 4 种。
  • 首项 1:(1,1,5)、(1,2,4)、(1,3,3),共 3 种。
  • 首项 2:(2,2,3),共 1 种。

当 n=1 时,剩余总和唯一确定最后一项,因此返回 1。合计 4+3+1=8。

答案:8。

易错提醒

初始下界是 0,允许出现 0;递归传入 i,允许相邻项相等。不要把输入换成 8 4。

真题版权归 CCF 所有,本站仅用于非商业教学用途。页面加载后可直接在线作答,作答记录保存在本浏览器或账号中。 京ICP备2026056990号-1 京公网安备11010502062986号