5.16周总结

刷题总结

在经历了一周的刷题,有以下感受:
1.背包问题大都都有固定的模板,所以做题之前一定要先审题,我自己总结成四步:(1)找到题目的条件(通过题中给出的物品及其他的数量来判断背包类型)(2)找到题目的目的(让我们求什么)(3)根据题意建立相应的背包方程(01背包的倒序,完全背包的正序等等等等都是解题的模板)(4)将其他代码根据题意补全(我觉得这一步才是最难的,见2)
2.(1)要根据题意进行相对应的数据初始化,这里才是最仁者见仁智者见智的地方,比如Y题:如果一开始,就把dp[i]全部初始化为0的话就没法分辨出到底是买不全还是 能买全但最大的价值为0,所以会把dp[0]=0,而其余的dp[i]=-0x3f3f3f来区分我们想要的答案。(2)不得不说开数组大小也是一个很细节的地方,这次刷题有很多题目都是 Runtime error,原因就是其中dp数组开的不够大导致错误。(3)还有就是结果的输出,这次遇到一个很新颖的题,自己要运行案列全部通过,但是提交以后是一个wrong answer,无意间测试了一下最大的情况,程序崩了,可已经用了long long来定义了,不知道怎么可以使数据更大了,在膜大神的代码以后找到输出大数这一方法,就是把数的前面一部分放进一个数组,后面剩余的部分放入另一个数组,然后同时输出这两个数组就看可以实现拼接,由此,从理论上讲,所有的数不管多大,都可以通过这种方式得到输出。(4)戒掉马虎,这次提交代码时很多次都忘了注释到freopen,每次都是提交按钮点了以后才想起来,白白的wrong answer。(5)有些题目可以合理的使用结构体,同时配合sort()也可以省去很多麻烦。(6)还有一个四舍五入的操作,n=n/100+0.5,目的是防止在后续中用dp[n]时导致错误。(7)“装满”这个问题,要提前初始化成dp[0]=0,而其余dp[i]=(要定义成一个大数),最后 if(dp[i]!=一个大数) 来判断是否装满。

昨天比赛的时候发现了一个问题:第A题:(e1.0/e+w) 100==k过不了测试,但是e1. 0/e+w==k1. 0/100 最后就是ac的,对比是百思不得其解啊。

这周通过刷题发现,确实有助于对问题的了解,自己刷题和看课件的进步是不同感觉的两种进步,每一次绿色的ac更是催促我向下一个题发起冲击的最好的鼓励,从一个题怎么都ac不了的焦躁不安到ac以后的如释重负,这其中的乐趣,我大概是触摸到了一点,课程虽然即将结课,虽然我不能做出什么高端的题,但进步不止,我仍然会努力。

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值