感觉是道比较简单的dp,但意外的比较容易做错,主要是细节很容易错。 状态表示:dp[i][j]来表示从前i个物品中取到j个能得到的最大受欢迎程度。 状态转移:对于第i个物品只有拿或者不拿两种选择,因为j我们保证一定能取这么多,所以如果拿第i个物品的话: dp[i][j]=dp[i-k][j-1]+a[i];从前i-k个物品中拿j-1个的最大值再加上a[i]。 如果不拿第i个物品: if((j-1)*k<=i-2) dp[i][j]=max({dp[i][j],dp[i-1][j]});判断从i-1个物品中能不能拿到j个,如过可以取最大值。 AC代码: #include<bits...