题目:
http://poj.org/problem?id=3661
这题要注意看清题意:一旦开始休息就要一直休息到疲劳值为0!
#include <cstdio> #include <iostream> #define INF 0x3f3f3f3f using namespace std; int a[10005]; int dp[10005][1005]; int main () { int n, m; scanf("%d%d", &n, &m); for(int i=0; i<n; i++) { scanf("%d", &a[i]); } for(int s=1; s<=m; s++) dp[n][s] = -INF; dp[n][0] = 0; for(int i=n-1; i>=0; i--) { for(int s=0; s<=m; s++) { if(s == 0) dp[i][s] = max(dp[i+1][s+1]+a[i], dp[i+1][0]); else if(s<m) dp[i][s] = max(dp[i+1][s+1]+a[i], i+s>n? -INF : dp[i+s][0]); else dp[i][s] = i+s>n? -INF : dp[i+s][0]; } } printf("%d\n", dp[0][0]); return 0; }