大家好,我是爱刷题的小单,欢迎交流指正~ 

目录

 ​大家好,我是爱刷题的小单,欢迎交流指正~ ​

🏆分享经历

🎁心路历程

🎁学习经历

🎁总结与复盘

🎁题目分享

🎁代码详解

 💌考后寄语


🏆分享经历

首先感谢支持我的家人朋友们和关注我的小伙伴们~

小单是大一零基础小白,也是第一次参加这个比赛,很开心能第一次就可以拿到省一~

🎁心路历程

  由于是第一次参赛嘛~其实发挥的并不是很好,入门也没多久,考试的时候非常的紧张,当时有一道数组下标写错了,硬是debug了半个小时没找出来,导致后面整体节奏崩盘,有两道题看都没看。脑子里也很乱,一些学过的算法也全部抛之脑后了。所以考完以后,我以为自己基本上打铁了~当时就告诉自己,什么结果也可以接受,其实这个奖项意义并不是很大,但是这几个月通过备赛的过程,自己学习到的知识和开阔的眼界才是最重要的。(不过感觉还是可以A个五六道左右的),查成绩的时候,当时是加的一个交流群里面发的获奖名单。那家伙,激动的心颤抖的手啊,毕竟准备了好久,当时想着最少能混个省三吧,就从省三从下往上翻,翻着翻着没有,(难道是省二?)省二也没有——(不是吧,没混到奖?)再往上看,好吧,省一,当时还是很狂喜的,开心了很久很久才平复了情绪,嘿嘿。那我作为大一小白,12月份才入门c语言,2月份左右接触算法,是如何用这么短的时间内混到省一的嘞?接着往下看~

从图书馆回家照的照片~owo 

🎁学习经历

  因为博主今年刚刚大一嘛~错过了院校组织的报名时间,当时也是和别人聊天的时候偶然知道了这个比赛,(原本想着混混综测来着,结果一入代码深似海,深深地爱上了算法),当时寒假的时候由于疫情原因,就决定不回家过年了~自己在学校附近租了一个房子,当时利用寒假备战软考和蓝桥杯的。和大家一样,既然决定参加了,就开始在网上查各种资料,例如:蓝桥杯做多少题能拿奖啊?^_^,慢慢的也了解了不少这方面的知识。那段时间我基本上是图书馆和家里两点一线,或者有时候就在家里敲代码。学校只开了c语言入门这节课,且结课的时候只讲了二维数组,我记得当时我一个for语句都要想半天,依稀记得有一天晚上,我第一次接触到快排,从晚上十点钟,一直研究到半夜两点钟,睡觉的时候脑袋里也都是代码~(当时是以为终于研究明白了,其实回过头来看看我当时一晚上想出来的都是错的,hh),当时有不懂的就去请教我们专业课老师,老师也会很耐心的给我解答,教我遇到这类问题该怎么解决。一开始我是没去图书馆的,自己在家敲代码,也有些黑白颠倒,就是晚上很晚睡,白天中午起那种。醒了就开始敲~此时博主可以持续专注的时间是很短的,学个三四个小时,就跑去干别的了 后来意识到不能这样下去了,就去了图书馆,以前都没有来过本地的自修室,不得不说,环境真的不错(不过他们真的好卷QAQ)

 图书馆的咖啡厅

  现在回想起来,之前摸索的那段时间是真的挺痛苦的,没有入门,也不知道有算法这种东西,直接看真题,看别人的题解代码。因为我只会用c,别人include <iostream>用cin cout读入我就看不懂了,还有一堆生疏的using namespace std;我就一点点查~后来选择了北大的郭老师的从c到c++,第一次知道了还有这么多牛逼的自带函数。当时我知道sort的时候,兴奋的一晚上没睡着~(当时好像还兴奋的发了个朋友圈,说sort真牛逼?),然后打了半个小时的algorithm来背这个头文件(笑哭)

  于是乎,博主开始了刷课历程,第一次接触到了OJ平台,就是郭老师的课后作业上面的北大oj平台,也是常常一道语法基础题搞一晚上,现在想想效率是真的低。刷完《从c到c++》这门课以后,我做真题的时候基本上可以看得懂别人的代码了,至少语法能看懂哈,逻辑还是不懂。后来我又刷了郭老师的第二门课,《算法基础》,学了点dfs和bfs,哎呦当时我那个兴奋劲啊,就觉得自己会了什么了不得的东西,dfs弄懂以后,哇!直接打开新世界的大门,世界上怎么有这么奇妙的东西呢?(刚学递归的时候是真滴痛苦,总会在脑子模拟递归的过程,还总是想不明白,又菜又爱乱想)于是乎,我充满信心的继续刷算法课,终于,卡在了动态规划。(是真的好难qaq,差点被劝退)我就开始琢磨,是不是我打开方式不对呢?为什么别人能想的出来的东西我就想不出来呢?真的是我智商不如人吗?此时不知不觉一天已经可以学习六七个小时了)就这样,东一榔头西一棒子的,这刷一道,那刷一道,刷到了开学。(其实刷完了还是不会,因为只是表面懂了,也不知道用了什么算法,而且效率巨慢)

 一道最基础的语法题,研究到图书馆下班QAQ,效率真的低

开学折腾了几天,因为要退房租搬东西啥的(其实过年那半个月也没咋学习,狗头保命),等安稳下来,差不过还有不到两个月就比赛了,我当时刷的是蓝桥官方的算法课,就加了官方的一些交流群,加了很多参加比赛的同学,都很努力,在一次偶然和同学聊天的时候,接触到了某算法学习网站(这就不说了哈),随便做了一道dp题,接触到了背包九讲,大为震惊!OWO什么?动态规划还可以这样想!瞬间被折服,如同发现宝藏一般~(距离比赛时间一个月,此时由于快比赛了,博主基本上抛去吃饭时间,八点到晚上十一点左右都是在备赛,已经可以保证一天学习十小时以上了),就这样,时间一眨眼就来到了比赛的日子。于是乎,就有了文章开头的比赛经历~

 第一次去自习室,还照了个相纪念hh

到现在,虽然博主拿了省一,但是奖项对我来说反而显得不那么重要了,在这个过程中,博主迈出了属于自己的第一步,我能感受到自己的学习能力在慢慢提升,也接触到了一些正在努力的同学们,最重要的是,明确了自己的发展方向!开心!owo

 过年的时候跑苏州嘚瑟了一圈~

🎁总结与复盘

复盘一下备赛历程,其实并没有刚开始想象的那么难,难的就是迈出第一步,制定第一个小目标并实现它。这期间会有很多座山,但难能可贵的是都不是很难翻越。就比如看题解看不懂,就自学一点c++语法。题目WA了,就要有一点点毅力花一晚上时间把它解决。多动手实践,多刷题,等熬过了刚开始的那个痛苦期,你就会在某一次AC的那一瞬间,感受到算法之美。或者在看懂某个题解的瞬间,旁若无人的拍手叫绝~这也许就是我喜欢学习算法的原因吧,虽然现在也经常被搞不懂的题目折磨的头大,但是理解那一瞬间的喜悦,和钻研题目过程的专注——那是一种狂喜和宁静的快乐。

虽然很多人都知道,这个比赛可能只算的上是一个新手训练营,就算拿到奖项也说明不了什么。(今年是真的有点难,看来还得练),但是对于我这种刚入门的菜鸟来说足够了,到现在为止,我的编码能力和算法能力应该比身边的认识一些同学稍微高一些,从寒假到现在,刷了差不多也有五六百道题目了。收获还是很大的~(我很鄙视那些冒泡排序都写不出来的人跟着人家大佬说暴力杯OAO,不过在内行人看来确实是一个较为low的比赛,大佬好像不屑于打hh)

能看到这里的同学我相信你们都有一颗不愿意认输的心,部分人可能没有目标四处试错,充满了迷茫、犹豫和彷徨,我想告诉你们的是——先沉下来,定一个小目标并坚持下去。相信你们一定可以收获到更多!

🎁题目分享

潜水员为了潜水要使用特殊的装备。

他有一个带2种气体的气缸:一个为氧气,一个为氮气。

让潜水员下潜的深度需要各种数量的氧和氮。

潜水员有一定数量的气缸。

每个气缸都有重量和气体容量。

潜水员为了完成他的工作需要特定数量的氧和氮。

他完成工作所需气缸的总重的最低限度的是多少?

例如:潜水员有5个气缸。每行三个数字为:氧,氮的(升)量和气缸的重量:

3 36 120

10 25 129

5 50 250

1 45 130

4 20 119

如果潜水员需要5升的氧和60升的氮则总重最小为249(1,2或者4,5号气缸)。

你的任务就是计算潜水员为了完成他的工作需要的气缸的重量的最低值。

输入格式

第一行有2个整数 m,nm,n。它们表示氧,氮各自需要的量。

第二行为整数 kk 表示气缸的个数。

此后的 kk 行,每行包括ai,bi,ciai,bi,ci,3个整数。这些各自是:第 ii 个气缸里的氧和氮的容量及气缸重量。

输出格式

仅一行包含一个整数,为潜水员完成工作所需的气缸的重量总和的最低值

慢慢的做过一点点题了,博主认为,刷题一定不要刷你理解不了的题,会有挫败感,某个地方你不理解,一定是中间漏掉了某些环节,水题也少刷,没什么提高。要刷就刷比你水平稍微高一点点的,总结这类模型,争取下次出现类似的题目时可以五分钟之内A掉,这样的提升应该是较大的。 

像我今天做的这道dp题,其实是一个二维费用的背包问题是吧,原本定义状态的时候,设f(i,j)为氧气恰好为i份,氮气恰好为j份时的最小重量,但是遗憾的是WA了.这是因为转移的时候,会漏掉一些状态。我们学习并总结正解,设f(i,j)为氧气至少为i份,氮气至少为j份,这样在转移的时候只需要判断一下,如果状态为负数,就把状态从0转移过来,比如至少为-2和至少为0,因为至少为-2包含至少为0,而状态不能为负。这样这道题就可以A掉了

🎁代码详解

#include<iostream>
#include<cstdio>
#include<algorithm>
#include<cstring>
using namespace std;
const int N = 30,M = 100;
int f[N][M];
int n,m,t;
int main(){
    cin >> n >> m >> t;
    memset(f,127,sizeof f);
    f[0][0] = 0;
    
    while( t-- )
    {
        int v1,v2,w;
        cin >> v1 >> v2 >> w;
        for(int i = N - 1;i >= 0; i -- )
            for(int j = M - 1; j >= 0; j -- )
            {
                f[i][j] = min(f[i][j],f[max(0,i - v1)][max(0,j - v2)] + w);
            }
        
        
        
        
    }
    
    
    cout <<f[n][m];
    
    
    return 0;
}

 💌考后寄语

  如果是没进入国赛的小伙伴,不要灰心,总结失败的原因!明年再战!算法的学习不是一个轻松的过程,需要大量的时间练习和积累,大佬之所以成为大佬也是无数个坐牢夜晚的累积~

  进入国赛的同学我们继续一起刷题战斗,小单和你们一起备战国赛和六月的csp认证!加油!

  同时欢迎小伙伴们随时私信我或评论交流~

一个人可以走的更快,一群人可以走的更远喔~

 小单本单

自己决定要走的路,无论如何,都要坚持下去~

成长过程中的挫折令你越挫越勇,倒了就再站起来!

加油,代码人!

(码字不易,给个三连可以嘛~QAQ)

更多推荐

蓝桥杯成绩公布——大一零基础如何三个月混到省一?