拼多多3/30思路

1-闯关
dp[i]=max(dp[i],dp[j-1]+val[i]); //满足条件 ch[j]=='b'&& kind[j] == kind[i]
① 可以暴力枚举i,j,当然这样写是O(n*n),需要优化
②  定义一个vector<int> vec[kind]存下标pos,其中下标满足ch[pos]=='b'&&kind[pos]==kind,这样能卡过(1700ms通过)就没继续优化了。
③ 继续优化可以发现对于一个kind,不需要遍历②的所有pos,而只需找到最大的dp[pos-1]即可,那么就可以继续优化到O(n)
--------------
2-最少施工队
树形dp,转移方程
dp[fa]+=(dp[son]==0? cost[{fa,son}]:dp[son])
① dp[i]表示以i的子树所需的施工队,cost[{fa,son}]表示fa-son这条边是0还是1
② 解释下方程,如果son子树已经需要派施工队去,那么fa-son这条边就不需要多的施工队了,否则看该边是0还是1
--------------
3-连续子数组最大乘积
①可以发现0会把数组划分成一段一段,答案区间一定不会包含0
②假如全部是正数,那么区间的乘积可以用2的幂次表示,所以记录2的幂次和即可(mp[8]=3,mp[4]=2)
②对于一段不含0的区间,需要让负号为偶数,所有如果区间是奇数个负数,那么就删去左边第一个负数 或者 右边第一个负数。
我的做法是用map<pair<int,int>,int> >mp存下所有的合法区间,mp[{l,r}]=sum,然后遍历mp求值。
tips:输出-1的数据只有6%,通过94%或者96%可能是因为下面的数据
--------------
5         |    5    
1 1 1 1 1   |   1 -1 1 1 1
4-最少操作
①从后往前构造,如果a[n]这个数被置为0会怎么样。
②a[n]不用置为0是数组什么情况
实际上只有 2 3  1 4 4 4 5 5这样的才会说少用次数,不需要去消除4和5,而 2 4 3 1 4 4  5就不能保留4 。
倒着去求就可以
--------------
代码是再牛客上直接写的,本地没有保存
全部评论
大佬
1 回复 分享
发布于 2023-03-30 18:04 湖南
欢迎补充
点赞 回复 分享
发布于 2023-03-30 17:48 湖北

相关推荐

Southyeung:我说一下我的看法(有冒犯实属抱歉):(1)简历不太美观,给我一种看都不想看的感觉,感觉字体还是排版问题;(2)numpy就一个基础包,机器学习算法是什么鬼?我感觉你把svm那些写上去都要好一点。(2)课程不要写,没人看,换成获奖经历;(3)项目太少了,至少2-3个,是在不行把网上学习的也写上去。
点赞 评论 收藏
分享
05-20 21:57
已编辑
门头沟学院 Java
喜欢吃卤蛋的悲伤蛙在...:建信融通没消息吧,我2说有实习挂简历不理了
点赞 评论 收藏
分享
看到这个内容真是闹麻了。。。。。。现在有了AI以后很多人面试都会作弊吗? 那对老老实实面试的人岂不是不公平....
程序员牛肉:公平那是对小孩子讲的童话故事,成年人的世界只有能不能接受失败的后果。 你要是能接受面试作弊被发现之后多家公司联合永久拉黑的后果,你就搞。
点赞 评论 收藏
分享
评论
6
6
分享

创作者周榜

更多
牛客网
牛客网在线编程
牛客网题解
牛客企业服务