532_450_1000

450P是个动态规划的题目,由于没有发现本质的状态,没能在比赛中做出来。

开始看数据那么小考虑怎么状态暴力求出来,然后再预处理一下,复杂度过不去。

思考的方向仍未改变,即还是考虑已处理的点构成的状态,需要记录的信息非常多,而且不能利用奇偶性。

就这样纠结到最后。

状态设计:已处理的点构成的状态,未处理的点构成的状态,以上两种情况混合。这里的处理也许换成扫描更合适。

1000P也是个DP题目,div1-hard难得能比较顺利地想出来,记录一下思维过程吧。

扫描二维码关注公众号,回复: 1390799 查看本文章

将K种颜色顺序化。

首先想到的是状态为d(n, m, tmax, K), 处理倒数第K种颜色,n行,行的长度为m,

每行最多拥有这种颜色的个数<=tmax个,

转移复杂度是n * tmax。总的复杂度是n^2*m^3*K,超时!

然后加了一种状态a(n, m, tm, K),处理倒数第K种颜色,n行,行的长度为m,

每行最多拥有这种颜色的个数<=tm个,且至少有一行的个数=tm

这样平摊下来每个a状态的转移复杂度是n,而d的转移复杂度也是n,

于是整个算法复杂度成了n^2*m^2*K(n <= 10, m <= 50, K <= 100), 通过评测!

这种做法相当于在状态d中萃取出另一种状态吧,然后发现两个状态相互推算,

减少多余的重复运算,多设计一个状态也许就少了一维的运算。

补充:

最多和最少可能是dp状态的突破口。

猜你喜欢

转载自splayx.iteye.com/blog/1401939