某次投了阿里算法岗玩,有一道题是这样的:
某张试卷有20题,做对一个得5分,做错一个得-3分,不做得0分。问:最后得分有几种情况?
随便写个程序暴力算一下即可。
那么如果范围比较大应该怎么办?
今天看《组合数浅谈》(王连笑著,哈尔滨工业大学出版社)里有讲解法。
设有n道题,评分标准如下:每道题答对得p分,答错扣q分,不答得0分,p, q ∈ N+, 且p, q互质,问:不同的成绩最多有几种?
题解:
设答对x题,答错y题,不答z题,那么显然 x+y <= n,直线左下角在第一象限内围成的区域。
大概就这样....
用长为q宽为p的矩形在x+y <= n的区域内移动,矩形的左下角和右上角的得分是一样的(多对q道题并多错p道题抵消),则我们只需统计阴影区域整点的个数即可。
大三角形内整点个数-小三角形内整点个数即为解。
水平不够啊....