今天360笔试C++第三题怎么做?

看了一圈都没人发,3号笔试的一批很冷么?
K种玫瑰花摆在N个位置上,要求每种花至少出现一次,求方法数。K不大于30,N不大于50000。我的思路是先K个位置上各放1种,然后有K!*C(K, N)种,但是发现会有很多重复的可能。于是只能暴力dfs剪枝,只过了20%。#C++工程师##360公司##笔试题目##面经#
全部评论
感谢楼上回复,我还是太水了,算法练习得少,写得不好。 关于2楼,我通过率是20%而该层主通过率40%的原因,刚才重写时也许找到了,我的代码逻辑错了。比如DFS到第i层,假如K种花都已经放过了,那么就可以不用继续递归了,剩下N-i层每一层都可以放K种花,也就是结果加上K的N-i次方。由于我是按照N=3 K=2来作为示例,所以这里我加上了2的N-i次方。 关于动归的思路,应该是f(n, k) = k*(f(n-1, k-1) + f(n-1, k)。设花的种类为1~k,f(n-1, k-1)可以看作前n-1个位置放置花种1~k-1的种数,然后第n个位置必须放置花种k。由于轮换对称性,第n个位置的花种k可以和任意花种兑换,因此要乘以k。f(n-1, k)则可以看作前n-1个位置就放置了所有的花种,因此肯定和前面的k*f(n-1, k-1)的放置放法是不同的。当然这里也要乘以k,因为第n个位置还是能放置k种花。
点赞 回复 分享
发布于 2018-04-04 03:49
dp吧 dp[n][k] = dp[n-1][k-1] + dp[n-1][k] * k
点赞 回复 分享
发布于 2018-04-04 01:13
容斥了解一下
点赞 回复 分享
发布于 2018-04-04 00:34
我dfs过40
点赞 回复 分享
发布于 2018-04-04 00:41
3号有巨人 美图 华为 360 人都分开了
点赞 回复 分享
发布于 2018-04-04 00:58
高中插空法了解一下
点赞 回复 分享
发布于 2018-04-04 06:37
第二类斯特林数了解下
点赞 回复 分享
发布于 2018-04-04 09:03

相关推荐

oppo 应用软开 22*15+0.5*12
拿到了ssp完美:真的坎坷,但是你至少拿到这么多offer了!
点赞 评论 收藏
分享
ProMonkey2024:5个oc?厉害! 但是有一个小问题:谁问你了?😡我的意思是,谁在意?我告诉你,根本没人问你,在我们之中0人问了你,我把所有问你的人都请来 party 了,到场人数是0个人,誰问你了?WHO ASKED?谁问汝矣?誰があなたに聞きましたか?누가 물어봤어?我爬上了珠穆朗玛峰也没找到谁问你了,我刚刚潜入了世界上最大的射电望远镜也没开到那个问你的人的盒,在找到谁问你之前我连癌症的解药都发明了出来,我开了最大距离渲染也没找到谁问你了我活在这个被辐射蹂躏了多年的破碎世界的坟墓里目睹全球核战争把人类文明毁灭也没见到谁问你了(别的帖子偷来的,现学现卖😋)
点赞 评论 收藏
分享
totoroyyw:千年老妖😂
投递华为等公司10个岗位
点赞 评论 收藏
分享
评论
点赞
收藏
分享
牛客网
牛客企业服务