这题在编程达人面前应该算是水题,但这算是我第一个做出来的动态规划程序,作为纪念,分享一下。题目链接:
简单描述一下题目:有n个学生站成一排,每个学生有一个能力值,需要按顺序选取k名学生,使得k个学生的能力值乘积最大,求该最大值。这里有两个注意点:1、相邻的两名学生在排列中的编号不能超过d(d由题目输入给出);2、学生能力值可以为负。
一开始我大概知道是个动态规划程序,但确实不知道怎么设计,又看到数据规模很小,并且于是想用暴力法解决,然后就自然而然地超时了。先简单说一下暴力法,就是对每个合唱团的学生,有选它,或不选它两个选项。于是就可以枚举,枚举时需要记录这次访问的人index,已经选择的人数nowK,上一个选的人last(两者差<d时才能走“不选它”的选项),和当前乘积mul。