ACM程序设计学期总结

本文是作者对ACM程序设计课程的学习总结,重点讲述了贪心算法、搜索和动态规划三大主题。作者强调了ACM课程对逻辑思维的锻炼价值,并分享了学习过程中的刷题、博客写作等经验。在贪心算法部分,作者探讨了其无后效性和局部最优解转化为全局最优解的策略。接着,介绍了搜索算法的深搜和广搜,强调了剪枝的重要性。最后,讨论了动态规划的概念,强调了在求局部最优解时要考虑全局目标。
摘要由CSDN通过智能技术生成

心路历程

        大一的时候就跟着费老师学了近一个学期的ACM程序设计课程,但是由于种种出自于自己的原因,当时并没有完全塌下心去学,只是学到了些基础的东西,做的题太少,当然也并没有深入理解。大二又有了这个机会,自然不能放过,又认认真真重新学了一遍。

        虽然这学期这门课一共只学了四个专题,但是对我来说,收获非常大,正像费老师说的:acm是思维的体操。它不停留在基本的语言层面,而是专注于解决各种实际问题的有一定难度的算法,它虽然会用到各种思想、各种工具,但是它不拘泥于某种固定的程式,而是需要无时不刻根据问题来变通,更要为了提高运行效率、降低时间复杂度而不断改进。       我相信这门课不仅对我以后的“程序猿”之路很有帮助,得到了新鲜雨露的逻辑思维对我的人生也必定有很大帮助。

        ACM作为一个选修课,由于比较困难而且不好拿到学分,大多数同专业的同学都没有选,但我认为上大学去努力多拿学分和得一些暂时看着非常耀眼的奖项并不是多么重要的,重要的是能在这个过程中收获到什么,能够得到多少,能对自己的未来发展有多大的帮助。而这门课除了学分比较难拿以外,我觉得从各个方面对自己的提升和帮助都非常大,这也是我坚持下去努力去学的原因。本来还想着看有没有机会成为一个acm队员,但是费老师说如果是14级的准备考研的同学,原则上是不收的,因为时间已经不允许了,明年的秋天正是备战比赛的时候,而作为考研党那时也正是备战考研的关键时期。想当初,在大一的时候,如果一直坚持、努力,自己是有机会的,可是却被自己浪费掉了,再也没有后悔药。

        无论如何,在人生的道路上,只能向前看,没有回头路,现在还是刚刚20岁的青年,还是清晨刚刚升起的太阳,只要从现在开始努力,一切都不算晚。对于自己的目标来说,自己的努力和付出还有很大的不足,不过令人高兴的事情还是有很多,自己一直在成长,一直在进步。下个学期还可以选费老师的acm后续课程,我会继续努力,希望能够可以更上一层楼。

        在马上要走向尾声的这个学期里,对于这门课来说,学习它的大部分时间就是刷题,在做题之中理解相应的算法,实践自己的思想。大部分题都是自己独立完成,还有一部分自己实在ac不了也不去copy别人的代码,而是去看别人的解题思路,或者去理解别人代码中所蕴含的算法思想,自己理解透彻之后再自己去写,直到这道题通过。通过后,紧接着就去写博客,写清题目大意、解题思路、ac的代码以及自己的感想。费老师安排的这种方式非常有效,既督促了自己去刷题,又在写博客的过程中将自己解题所用到的思想在心中得到了很大的巩固,以后还可以去看自己的博客来实现高效率的复习,非常棒。

        这个学期马上就要结束,第四个专题还在进行,自己的努力更会马不停蹄,坚持住自己的心,去朝着自己的目标不断迈进!





贪心算法

        所谓贪心算法,就是在求最优解问题的过程中,依据某种贪心标准,从问题的初始状态出发,直接去求每一步的最优解,通过若干次的贪心选择,最终得出整个问题的最优解。

        贪心算法不是对所有问题都能得到整体最优解,关键是贪心策略的选择,选择的贪心策略必须具备无后效性,即某个状态以前的过程不会影响以后的状态,只与当前状态有关。

        贪心算法的一般流程:

Greedy(A)    //A是问题的输入集合即候选集合

{

  S={ };           //初始解集合为空集

  while (not solution(S))      //集合S没有构成问题的一个解

  {

    x = select(A);       //在候选集合A中做贪心选择

    if feasible(S, x)      //判断集合S中加入x后的解是否可行

      S = S+{x};

      A = A-{x};

  }

  return S;

        我所认为的贪心算法并不是一个固定的程式,而是一种贪心思想,一种算法思想。虽然贪心算法是做出局部最优解来取得全局最优解,但是我认为要解决好一个问题首先要用全局的眼光看待和分析问题。就比如 ProblemF 1005 花最多数量的纸币 这个问题:给出1角、5角、1元、5元、10元的数量,以及想购买的图书价格,在不需要卖家找零的前提下,求出最少需要花多少张纸币以及最多需要花多少张纸币,如果不能实现则输出-1 -1。

        要算出最少花多少纸币比较容易,但是如果直接正向的去求最多能花多少纸币则相当麻烦,但是如果反过来想,求最多花多少纸币就相当于最少剩多少纸币&

  • 2
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值