一个人跑步,n分钟,每分钟跑得距离不同并给出了,有一个累的程度,每跑一分钟累的程度+1,当这个值到达m时,必须休息,而且必须休息到疲劳度为0才能继续,每休息一分钟疲劳度-1,当他疲劳度没满时,他也可以选择休息,求n分钟疲劳度为0的时候能跑的最远距离,
可以用二维DP解决,dp[i][j]表示 第i分钟疲劳度为j时的最大距离,最终解就是dp[n][0];
第一个方程 :dp[i][j] = dp[i-1][j-1] +distance[i];
还有一个dp[i][0] = dp[i-1][0],因为能选择休不休息
最后一个for(int k=1;k<=m;k++)
if(i-k >= k)
dp[i][0] = max(dp[i][0],dp[i-k][k]);
#include
#include
#include
#include
#include
#include
#include
#include
#include