题目讲解(1到5)

1

编写一个能够输出 Hello,World! 的程序。

提示:

  • 使用英文标点符号;
  • Hello,World! 逗号后面没有空格。
  • H 和 W 为大写字母。

输入格式

输出格式

输入输出样例

输入 #1复制

输出 #1复制

Hello,World!

这个不会写没啥讲的自裁吧,程序员的开始,一切罪恶的起点!!!!!

毁灭吧

2台阶问题

有 N 级台阶,你一开始在底部,每次可以向上迈 1∼K 级台阶,问到达第 N 级台阶有多少种不同方式。

输入格式

两个正整数 N,K。

输出格式

一个正整数 ans(mod100003),为到达第 N 级台阶的不同方式数。

输入输出样例

输入 #1复制

5 2

输出 #1复制

8

说明/提示

  • 对于 20%20% 的数据,1≤N≤10,1≤K≤3;
  • 对于 40%40% 的数据, 1≤N≤1000;
  • 对于 100%100% 的数据,1≤N≤100000,1≤K≤100。

题目大意肯定是非常容易理解的

1...反向推导->首先我们想要求得到第n阶,

我们可以枚举他的最后一步往前看

可以得到ans[n]=  ans[n-1]+ans[n-2]........ (从1到k) 但是k不能超过第n阶

不断的传下去最后一定会归于 ans[1]一个台阶需要几步

2...正向推导->首先我们想到一个台阶需要几步

一步(显然)

两个台阶嘞

有两种情况 1一步一步走两步 2一次走两步(前提是可以一次两步)

三个台阶嘞 只考虑最后一步 可以一步那就是加上ans[2],两步加上ans[1],三步加上ans[0]

有此完全可以看出我们只要枚举最后一步即可(其实与上面一样)

不断的往后退推到最后的未知数只有ans[0]和ans[1]很显然这两个我们知道

都为一

写法有两种可以递归(dfs)记忆化

也可以迭代(动态规划)

思路其实都一样

1递归(dfs)记忆化

#include <cstdio>
#include <cctype>
#include <vector>
#include <cstring>
#include <algorithm>
#include <iostream>

using namespace std;
int kk[100000] &
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值