对于分类讨论DP的顺序问题
查看原帖
对于分类讨论DP的顺序问题
149192
__gcd楼主2020/7/2 20:04

不是讨论区题解(声明)

学那么久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,第一轮过后,dp1dp_{1}dptdp_t 的值如下:60 120 180 180

第二轮:60 120 180 197

如果把第二部分放在第一部分,两轮分别如下:17 34 51 6860 120 180 180

但是我实在没有看出两种方法的本质区别在哪

所以本质区别在哪?

2020/7/2 20:04
加载中...