头歌资源库(22)求组合数

一、 问题描述

二、算法思想  

       动态规划是一种将问题分解成子问题并保存子问题解以避免重复计算的算法思想。

       对于组合数C(n, r),我们可以将问题分解成子问题C(i, j),其中i表示从1到n的选择数,j表示选择的元素个数。则C(n, r)可以通过求解C(i, j)来得到。

       动态规划的递推关系为: C(i, j) = C(i-1, j-1) + C(i-1, j)

       边界条件为: C(i, 0) = 1 (选择0个元素,只有一种情况)

                              C(i, i) = 1 (选择i个元素,只有一种情况)

       根据递推关系,我们可以使用一个二维数组dp来保存子问题的解。

三、代码实现    

#include <stdio.h>

long long combination(int n, int r) {
    long long dp[n + 1][r + 1];  // 创建一个二维数组保存中间结果
    
    // 计算组合数
    for (int i = 0; i <= n; i++) {
        for (int j = 0; j <= r && j <= i; j++) {
            if (j == 0 || j == i) {
                dp[i][j] = 1;  // 边界条件
            } else {
                dp[i][j] = dp[i - 1][j - 1] + dp[i - 1][j];  // 递推关系
            }
        }
    }
    
    return dp[n][r];  // 返回计算结果
}

int main() {
    int n, r;
    scanf("%d %d", &n, &r);
    
    long long result = combination(n, r);
    printf("%lld",result);
    
    return 0;
}

执行结果   

 结语     

在任何一个你没有察觉的时刻

包括现在

通过行动去改变命运的机会

一直都存在

!!!

相关推荐

  1. 基于栈的后缀算数表达式值(

    2024-07-09 20:42:03       30 阅读

最近更新

  1. docker php8.1+nginx base 镜像 dockerfile 配置

    2024-07-09 20:42:03       49 阅读
  2. Could not load dynamic library ‘cudart64_100.dll‘

    2024-07-09 20:42:03       53 阅读
  3. 在Django里面运行非项目文件

    2024-07-09 20:42:03       42 阅读
  4. Python语言-面向对象

    2024-07-09 20:42:03       53 阅读

热门阅读

  1. qt 线程举例

    2024-07-09 20:42:03       21 阅读
  2. 知名的以图叙事开源平台和工具

    2024-07-09 20:42:03       29 阅读
  3. windows局域网文件传输方案

    2024-07-09 20:42:03       23 阅读
  4. 宝塔内 计划任务更新远程主机的时间

    2024-07-09 20:42:03       24 阅读
  5. kotlin 两个 list 怎么过滤重复数据

    2024-07-09 20:42:03       20 阅读
  6. VBA中打开、保存关闭Excel工作簿的方法

    2024-07-09 20:42:03       18 阅读
  7. SQL基础

    SQL基础

    2024-07-09 20:42:03      16 阅读
  8. 如何在SpringCloud项目中实现客户端负载均衡?

    2024-07-09 20:42:03       25 阅读