poj 3661

题目:http://poj.org/problem?id=3661

题意:一头牛,给出他运动的时间 ts,在运动时间内,它可以选择跑步,也可以选择休息,如果他跑步疲劳值 +1,如果休息疲劳值 -1,如果它在休息,那么必须疲劳值为0时才能跑步,问到第N秒且疲劳值为0时,牛可以跑得最远距离

dp[i][j] 表示 在第 i 秒时 疲劳值为 j 时牛跑的最远距离,那么方程就是 dp[i][j] = dp[i - 1][j - 1] + dis[i] (如果在第 i 秒跑步)dp[i][0] = Max(dp[i][0],dp[i - j][j]) (if( i - j >= j),初始化 dp[i][0] = dp[i - 1][0];

View Code
 1 typedef long long ll;
 2 const int N = 10001;
 3 const int M = 501;
 4 int dp[N][M];
 5 int dis[N];
 6 int n,m;
 7 int main()
 8 {
 9     int i,j;
10     //freopen("data.txt","r",stdin);
11     while(scanf("%d%d",&n,&m) != EOF)
12     {
13         for(i = 1; i <= n; i++)
14         scanf("%d",&dis[i]);
15         for(i = 1; i <= n; i++)
16         {
17             dp[i][0] = dp[i - 1][0];
18             for(j = 1; j <= m && j <= i; j++)
19             {
20                 dp[i][j] = dp[i - 1][j - 1] + dis[i];
21                 if(i - j >= j)
22                 dp[i][0] = Max(dp[i][0],dp[i - j][j]);
23 
24             }
25         }
26         printf("%d",dp[n][0]);
27     }
28     return 0;
29 }
posted @ 2012-09-15 15:58  AC_Girl  阅读(135)  评论(0编辑  收藏  举报