【题解】
动态规划,dp[i][j]表示第i分钟疲劳度为j的最长距离。
【代码】
1 #include <iostream> 2 #include <cstdlib> 3 #include <algorithm> 4 #include <cstring> 5 using namespace std; 6 #define scan(x) cin >> x 7 #define print(x) printf("%d ", x) 8 #define maxn 10005 9 #define maxm 505 10 11 int D[maxn], dp[maxn][maxm]; 12 13 int main() 14 { 15 int N, M; 16 scan(N); 17 scan(M); 18 for (int i = 1; i <= N; i++) scan(D[i]); 19 for (int i = 1; i <= N; i++) { 20 dp[i][0] = dp[i - 1][0]; 21 for (int j = 1; j <= i && j <= M; j++) { 22 dp[i][0] = max(dp[i][0], dp[i - j][j]); // If spent the preceding j minutes resting 23 dp[i][j] = max(dp[i][j], dp[i - 1][j - 1] + D[i]); // Run when fatigue degree is j. 24 } 25 } 26 print(dp[N][0]); 27 //system("pause"); 28 return 0; 29 }