2019.1.29 自主训练日志

      训练第九天,今天了解了贪心算法,百度了一下算法分析的内容。除去一些简单题目,把台阶的进阶题目解决了。
      先说一下贪心算法(目前理解的程度),和它的名字一样,贪心算法是"短视"的,只顾眼前的利益,不考虑整体最优。假设每一步选择都是不可逆的,每一步选择之后都有多个选择,而我们要做的就是选择当前利益最高的那个选项,直到达到最终目的,然后再回头看对于整体是否趋于最优。贪心算法可以说是最简单的一种思路,用每一步的最优趋近整体最优,而在很多情况下贪心是正确的。
      在自学贪心算法的过程中了解了什么是"树"——单向连接没有回路的点集,树的最直观形象就是生物学上的树,但理解的时候不可局限于此。还有算法复杂度的问题,时间复杂度其实就是算法执行每一步所需时间的总和,并没有想象中的难理解(눈_눈),空间复杂度有关存储空间的知识,看着有点懵。
      最后说一下今天做的题目

小瓜想走上一个一共有n级的台阶,由于小瓜的腿长比较特殊,他一次只能向上走1级或者3级或者5级台阶。小瓜想知道他有多少种方法走上这n级台阶,你能帮帮他吗?
输入
一行一个整数n(n<=100000),表示一共有n级台阶。
输出
一行一个整数,表示小瓜上台阶的方案数对100003取余的结果。
输入样例
3
输出样例
2
区别于上一题,这次小瓜同学能跳1 3 5三种不同的台阶了。多算几次就可以发现其中的规律,n阶台阶可以分成1 3 5不同的三部分,一种类似于斐波那契数列的数列。代码实现如下
#include
using namespace std;
long long int a[100003];
int main()
{
long long int n,i;
cin>>n;
a[n] = 1;
for(i = n;i>=1;i–)
{
a[i-1] = (a[i-1]+a[i])%100003;
a[i-3] = (a[i-3]+a[i])%100003;
a[i-5] = (a[i-5]+a[i])%100003;
}
cout<<a[0];
}
明天继续看贪心算法的例题,然后将51nod用到贪心算法的题目做几道,争取掌握使用贪心算法。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值