链接
题意
\(\text{Bessie}\)在一个直赛道上跑步,他需要跑\(\text{N}\)分钟,其中第\(i\)分钟他能跑\(d_i\)米,同时他还有一个最大疲劳值\(M\),开始的时候它的疲劳值为\(0\),跑步的时候每一分钟他都可以选择跑与不跑,如果跑的话,他的疲劳值就会增加\(1\),如果选择休息,他的疲劳值就会下降,但是他只能等疲劳值下降到\(0\)才能再次跑,现在你需要求出\(\text N\)分钟之后,他的疲劳值为\(0\)时他能跑的最大距离是多少。
数据范围:\(1\leq \text{M} \leq 500\),\(1\le d_i\le 1000\).
分析
这是一道区间\(dp\)的题目;
\(dp[i][j]\)表示跑完\(i\)分钟,疲劳值为\(j\)时所能跑的最大距离;那么对于一个状态\(dp[i][j]\),他有可能从两种状态转移过来,一种是第\(i\)分钟跑了,对于这种状态有\(dp[i][j]=dp[i-1][j-1]+a[i]\),另一种情况是没跑,对于没跑的情况,有可能\(i-1\)分钟也没跑,第\(i\)分钟没跑也只是一个中间状态,这样就无法求解,所以我们需要考虑\(dp[i][0]\),\(dp[i][0]\)一定是由\(dp[i-j][j]\)转移而来的(对于休息的情况,直接考虑开始休息和结束休息,中间不考虑);
即对于第\(i\)分钟休息和跑的情况分开考虑。
代码
1 |
|