鱼C论坛

 找回密码
 立即注册
查看: 3758|回复: 7

[已解决]经典问题之爬楼梯(c)

[复制链接]
发表于 2022-9-24 10:57:00 | 显示全部楼层 |阅读模式

马上注册,结交更多好友,享用更多功能^_^

您需要 登录 才可以下载或查看,没有账号?立即注册

x
台阶数仍为n,每次你可以向上走至少1个至多 K 个台阶,有多少种不同走法?
最佳答案
2022-9-25 10:33:23
本帖最后由 傻眼貓咪 于 2022-9-25 10:35 编辑

纯粹想练习练习,太久没有写代码了,生疏
我的思路:动态规划

C++
  1. #include <iostream>
  2. #include <map>

  3. using std::map;
  4. int foo(int n, int k, map <int, int> MAP) {
  5.         int count = 0;
  6.         if (not(n)) return 1;
  7.         if (MAP.count(n)) return MAP[n];
  8.         else if (n >= k) {
  9.                 for (int i = 1; i <= k; ++i) count += foo(n - i, k, MAP);
  10.         }
  11.         else count += foo(n, n, MAP);
  12.         MAP[n] = count;
  13.         return count;
  14. }

  15. using std::cout, std::endl;
  16. int main(void) {
  17.         map <int, int> MAP;
  18.         int n = 10, k = 4;
  19.         cout << foo(n, k, MAP) << endl;
  20.         return 0;
  21. }
复制代码
Java
  1. import java.util.*;

  2. public class Main
  3. {
  4.         public static int foo(int n, int k, Map <Integer, Integer> map) {
  5.             int count = 0;
  6.             if (n == 0) return 1;
  7.             if (map.containsKey(n)) return map.get(n);
  8.             else if (n >= k) {
  9.                 for (int i = 1; i <= k; ++i) count += foo(n - i, k, map);
  10.             }
  11.             else count += foo(n, n, map);
  12.             map.put(n, count);
  13.             return count;
  14.         }
  15.        
  16.         public static void main(String[] args) {
  17.             Map <Integer, Integer> map = new HashMap <Integer, Integer>();
  18.             int n = 10, k = 4;
  19.                 System.out.println(foo(n, k, map));
  20.         }
  21. }
复制代码
Python
  1. def foo(n, k, MAP = dict()):
  2.     count = 0
  3.     if not n: return 1
  4.     if n in MAP.keys(): return MAP[n]
  5.     elif n >= k:
  6.         for i in range(1, k + 1):
  7.             count += foo(n - i, k, MAP)
  8.     else: count += foo(n, n, MAP)
  9.     MAP[n] = count
  10.     return count

  11. n, k = 10, 4
  12. print(foo(n, k))
复制代码


C 懒的写,就不写了 ,至於 C++ 速度极慢,参数如果太大需要时间运行。
小甲鱼最新课程 -> https://ilovefishc.com
回复

使用道具 举报

 楼主| 发表于 2022-9-28 15:57:07 | 显示全部楼层
高山 发表于 2022-9-24 13:56
回答不易,望设最佳

您好,我是小白,请问输出dp是什么意思?dp不是一个数组吗
小甲鱼最新课程 -> https://ilovefishc.com
回复 支持 反对

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

小黑屋|手机版|Archiver|鱼C工作室 ( 粤ICP备18085999号-1 | 粤公网安备 44051102000585号)

GMT+8, 2025-11-7 02:58

Powered by Discuz! X3.4

© 2001-2023 Discuz! Team.

快速回复 返回顶部 返回列表