- 博客(13)
- 收藏
- 关注
原创 部分背包问题(洛谷p2240)
这个题应该算是思路比较简单的一道了(个人感觉),因为他是通过单价排序,把数据录进去之后根据单价排个序,然后遍历一下不就解决了吗?然后我们发现,一维数组不够存储我们需要的数据,那我们会想到什么呢?没错,结构体,然后排序用一下sort(非常好用的排序函数,不知道的友友可以学习一下)就可以了,最后保留两位小数,可以用这种形式:printf("%.2f", sumvalue);
2024-08-22 19:51:30
184
原创 外星密码(p1928)C++实现
我认为知道这个思路也不好完成这个代码的原因在于,当题目上给了一个完整的字符串,我们往往想着直接给一个string类型,但通过代码不难发现,他把读入的数据分了好多段读入,最后把需要的加入到字符串中,这种思想正是我们需要学习的。这道题其实第一个方法很好想,就是模拟,思路也不是很难,很考察思维的完整性和自洽性,鼠鼠写一半就写不下去了,然后看了看书,发现用模拟法的话这道题是真简单,先把第一种方法贴出来。
2024-08-22 16:30:36
295
原创 Function(洛谷p1464)C++实现
没错就是函数体,虽然主函数中定义的是long long,但在函数体里使用的仍然是int,因为鼠鼠刚开始以为int就够了,后面发现int不够,便改成long long但没想到还有漏网之鱼,大家写的时候也一定要注意了。比20大的我不是都转化为20了吗?”但仔细看,会发现,应该先转换,在判断是否存过对应的值,于是我们修改一下,便得到了新版的错误代码。当 a,b,ca,b,c 均为 1515 时,调用的次数将非常的多。这个是什么,只要稍微多写两道题,或者看到昨天的博客,就可以知道,这玩意就是记忆化搜索,即用。
2024-08-21 14:57:05
146
原创 数的计算(洛谷p1028)
可以看到红笔圈住的部分我们是需要重复进行计算的,将会浪费大量时间,那我们有没有什么办法把结果存储进来,算过的就直接调用呢?Time limit exceeded,意思就是超时了,这时就需要用到昨天的一个思路,记忆化搜索,在我看来,他的本质就是。这个题咱们的思路和上面的题相似,全都是化繁为简,如n=6,往下分就有三种情况。然后我们便能得到这样的程序,但是教的时候便会发现。这就用到了递归思想,于是可以写出这样的程序。要时便可直接调用出来。
2024-08-20 11:08:18
133
原创 栈(洛谷p1044)c++实现
这道题的第一个难点在于读懂题,,,他巴拉巴拉了一大堆,我硬是看了好几遍才看懂,实际的意思就是有一个栈(单方向进和单方向出的,大家应该知道吧,不知道的话可以看一下站内大佬的讲解,非常重要也是基础的一种数据结构),然后将n个不同的小球按顺序放入栈,在小球放入的过程中也可以把栈顶的一个或多个球有顺序的拿出来,大概意思就是这样。然后第二个难点是,如果想计算器编的简单,那你就得想的复杂,这边语言不好描述,我直接把书搬过来(应该不能算违权吧,我的博客这么小众)站内大佬写的,不是我。
2024-08-19 18:05:07
387
原创 过河卒(洛谷p1002)
会下象棋的大家都知道,过河卒是能左右移动的,而这道题说的是只能向右移动,这是一个区别,也简化了题目,像这道题用到的方法还是递推,和昨天那道题一样,即a[i][j] = a[i - 1][j] + a[i][j - 1]对吧,一个点的方法数就等于他左边那个点的方法数加上上边那个点的方法数,然后同理,就可以一直递推下去,假设没有马的存在,当目标坐标为(3,3)时,就可以得到如下图。然后如果在复杂了也是同理,,,但现在的问题是多了一只🐎,那怎么办呢,有马的地方就是到不了的地方,将。马和马控制的地方定为0。
2024-08-19 16:11:23
137
原创 数楼梯(洛谷p1255)
这道题用的是典型的递推思想,可以倒着来想,比如要走到1000个台阶,那前一步一定就在999或者998,那走到1000的方法数就等于走到999的方法数加上998的方法数。什么问题呢,其实是因为兔子生的比较快(斐波那契数量变化非常剧烈),超出了longlong的范围,所以我们应该怎么解决呢,答案就是高精度加法,高精度加法实际就是模拟加法的一个过程,然后用字符串类型来表示,然后把进位什么的都模仿一下,就可以了。好,这道题思路已经有了,那我们就能很简单的写出代码。
2024-08-15 10:14:49
247
原创 next_permutation函数用法及例题(洛谷p1618,p1706,p1088)
next_permutation是algorithm标准库中的一个标准函数,它可以表示[start,end)内存的数组中产生严格的下一个字典序排列。总结:这篇文章主要是讲了库函数的使用以及一些简单例题的讲解,如果掌握了函数的用法,这几道例题应该问题不大,其实这几类题都属于排列枚举的范畴,而排列枚举,我们可以首先考虑能否通过使用这个函数来简化思路。=M然后我就发现不对,每回都差一个,然后就加了一个-1.至于为啥差一个我也不是很清楚了,感觉是题目的问题,因为按。应该是不需要过多的解释,大家不懂的可以问我。
2024-08-13 16:03:28
544
原创 洛谷P1157 组合的输出(C++)
我们先按之前的思路来走,按样例来看,最开始是00000,接着是00001,符合条件的第一个是00111,我们按个位是1,十位(这里是二进制数,按理来说不该是个位,十位,但鼠鼠也不知道咋叫)是2,依次递增百位是3,那么00111这个数代表的就是123,接着就是01011,就是124,然后是01101,就是134,注意看,第三个输出的数就和样例给的不一样了,我先把代码贴出来(瑕疵版),具体思路和昨天那道题基本一样,但是这道题有个特殊的地方,他的输出方式是字典序(额,这个说法比较专业,但实际上知道就好)。
2024-08-13 09:10:58
255
原创 洛谷P1036 选数(C++)
那我们面临的第二个问题就是,3个1怎么找,这里其实c++正好有个函数可以实现这个功能,叫做__builtin_popcount(int n),他的功能就是比如n为15时,他会返回15的二进制形式(1111)中有几个1(没错,就这样就解决了)但是,这个函数,他只是在GCC编译器里才能使用,如果在其他编译器里,可能就没法用了(鼠鼠就是这样子,然后查了半天资料),但是,咱们可以试着模拟实现一下,也不是很复杂。这句话的作用就是判断哪里是1,“&”的意思就是与,即0&0=0,0&1=0,1&1=1;
2024-08-11 16:24:23
474
原创 洛谷P1618三连击(升级版)(C++)
这个题目我刚开始是卡住的,因为我想的是三次遍历,找到三个数,看他们是否符合那个比例,然后接着在判断是否是9个不重复的数字。但因为作者比较笨,9个不重复的数字怎么判断都不知道,然后就去看了答案。第二个问题,既然已经确定了三个数,那么只需判断他是否是9个不重复的数字了(当然,三个数字的范围应该是123-987),这时我们可以借助一个非常非常常用的方法,,例:如果分解出来的存在1,那么b[1]=1;首先比例刚开始就确定了,所以就可以只遍历一次,然后根据比例算出另外两个数。注意细节:注意比例中可以是0:1:2,
2024-08-11 08:01:23
136
原创 烤鸡(洛谷P2089)
这个题其实是比较简单的,但很多人可能不敢写10个循环,比如我。因为我当时想着10个循环,时间复杂度整这么高,不得把电脑算死,但实际上每个循环只运行3次,所以就还行。然后里面所有的循环都可以替换成这个宏定义,即rep(a,1,3)=for(int a=1;a++)能够简单一点吧。然后这道题理论上是还可以优化的,但是作者懒得优化了。(就是和是一定的,前面的数确定后,就可以约束后面数的范围)然后如果不想这么复杂的话可以加个宏定义。
2024-08-10 15:47:10
197
原创 c语言入门
因为目前学习的专业还没有确定,将来应该是向电气工程及其自动化或者计算机方向来发展。无论是哪种方向,我觉得c语言的基础都是必不可少的。自我介绍:大家好,我是一名刚接触c语言的小白,不定时的会在CSDN上上传自己的一些学习经验。目标:通过学习,能够真正掌握c语言这种语言,并把它实际运用到以后的实际生活、工作中。学习编程,我觉得最重要的是动手实践,多动手去敲代码。大概一周花15个小时去学习c语言。
2023-07-20 17:11:53
29
空空如也
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人