从正面寻找最大值太难了,不如换个思维,从反面来找答案。既然题目是要求最大的训练效果,那我们就去找因为休息而浪费的最小训练效果,最后再让总的训练效果减去浪费的最小训练效果就得出答案了,这样就方便多了。要求第i天浪费的最小值,只需要找到[i-k-1,i-1]这个区间里浪费的最小值进行了。因此状态转移方程只有一种: dp[i]=1e18; for(int j=i-k-1;j<i;j++) { dp[i]=min(dp[j],dp[i]); } dp[i]+=arr[i]; #include<iostream> using namespace std; #define int lon...