当前位置: 首页 > article >正文

洛谷题目:P1025 [NOIP2001 提高组] 数的划分 题解

题目传送门:P1025 [NOIP2001 提高组] 数的划分 - 洛谷 | 计算机科学教育新生态 (luogu.com.cn)

解题思路:
1、动态规划:

        这道题我们使用动态规划来暴力解决这个问题,定义一个二维数组dp[i][j],表示将证书

        i分成j份的不同分法数。

2、状态转移:

        状态转移方程为:

        dp[i][j]=dp[i-1][j-1]+dp[i-j][j]

        dp[i-1][j-1]表示将i-1分成j-1份,然后每份都加上1.

3、初始化:

        dp[i][1]=1 对于所有i>=1,因为将i分成i份,每份都是1.

4、最终计算结果QWQ:

        dp[n][k]

5、代码
#include <bits/stdc++.h>
using namespace std;
int main() {
    int n, k;
    cin >> n >> k;

    vector<vector<int>> dp(n + 1, vector<int>(k + 1, 0));

    // 初始化
    for (int i = 1; i <= n; ++i) {
        dp[i][1] = 1; // 将 i 分成 1 份只有一种方法
    }
    for (int j = 1; j <= k; ++j) {
        dp[j][j] = 1; // 将 j 分成 j 份,每份都是 1
    }

    // 动态规划
    for (int i = 2; i <= n; ++i) {
        for (int j = 2; j <= k; ++j) {
            if (i >= j) {
                dp[i][j] = dp[i-1][j-1] + dp[i-j][j];
            }
        }
    }

    // 输出结果
    cout << dp[n][k] << endl;

    return 0;
}


http://www.kler.cn/a/506130.html

相关文章:

  • 【物联网】ARM核介绍
  • Linux 常用命令 - chmod 【改变文件或目录权限】
  • EPC建设模式
  • 【AI日记】25.01.15
  • 从源码角度分析SpringMVC执行流程
  • 51_Lua面向对象编程
  • 剑指Offer 砍竹子
  • Java学习笔记(二十三)
  • VM虚拟机的CentOS7系统启动时报错:Generating /run/initramfs/rdsosreport.txt
  • 麦田物语学习笔记:代码链接UI实现时间日期对应转换
  • 计算机组成原理复习笔记
  • 在 QNAP NAS中使用 Container Station 运行 Docker 的完整指南
  • 软件测试 —— Selenium(弹窗)
  • Dart语言的文件操作
  • 疾病防控综合系统设计与实现(代码+数据库+LW)
  • 构建高效安全的数据库异地备份方案
  • 计算机三级网络技术 大题(学习笔记)
  • 使用el-tree根据切割规则切割数据生成树形结构
  • Python猜数小游戏
  • idea上git log面板的使用
  • openharmony标准系统方案之瑞芯微RK3568移植案例
  • 用ChatGPT进行酒店评论情感分析
  • HTTP:TIME_WAIT累积与端口耗尽
  • delphi 调用 c++Dll 函数获取纯真ip地址
  • 浅谈云计算15 | 存储可靠性技术(RAID)
  • 如何在谷歌浏览器中设置自定义安全警告