个人思路, 考的时候没改完bug, 考完再调了下感觉可行, 就是复杂度略大.  
第三题类似背包问题的变种, 先按喜欢程度排个序, 按选择的零食数量和预算进行dp, 对于特别喜欢的零食 更新公式为dp[i][j][k] += dp[i - 1][p][k - j * v[i]]   0<= j < p,  i表示第i件特别喜欢的零食, j表示取j件, k表示已使用的预算
剩下的普通零食先求和, 然后按完全背包的做法从小到大更新cur[i] += cur[i - v[i]], 最后取cur[v]即可,