不是讨论区题解(声明)
学那么久OI不会黄DP,自闭了。打算回炉重造。
关于方法,直接看这篇题解吧
这题我们可以分成两类:
DP的代码:
for(int i = 1; i <= t; i++)
{
if(m >= 10){dp[i] = dp[i - 1] + 60; m -= 10;}
else {dp[i] = dp[i - 1]; m += 4;}
}
代码:
for(int i = 1; i <= t; i++)
{
dp[i] = max(dp[i], dp[i - 1] + 17);
}
代码实现中,第一部分必须放在第二部分之后,原因是样例这组数据:39 200 4
按照正常的DP,第一轮过后,dp1 到 dpt 的值如下:60 120 180 180
第二轮:60 120 180 197
如果把第二部分放在第一部分,两轮分别如下:17 34 51 68
,60 120 180 180
。
但是我实在没有看出两种方法的本质区别在哪。
所以本质区别在哪?