摘要: n的规模可以状压,f[x][y][S]表示x行,y列,S集合的巧克力能否被切割。预处理出每个状态S对应的面积和sum(S),对于一个合法的状态一定满足x*y=sum(S),实际上只有两个变量是独立的。而且有x,y等效与y,x,那么这里取max(x,y)。转移的时候枚举S的非空真子集,横着切或者竖着切... 阅读全文
posted @ 2015-09-29 18:48 陈瑞宇 阅读(479) 评论(0) 推荐(0) 编辑
摘要: 如果状态定义为序号和重量的话,决策就是下一个垃圾捡或者不减,但是状态数太多了。如果只定义序号作为状态的话,决策就变成从前面的某个j一直捡到i才送回垃圾。这就变成了一个区间选最小值的问题,用单调队列维护。复杂度O(n)#includeusing namespace std;const int maxn... 阅读全文
posted @ 2015-09-29 17:59 陈瑞宇 阅读(221) 评论(0) 推荐(0) 编辑
摘要: 这是一个零和博弈,最高得分只和序列以及谁先手有关。d[i][j],表示i到j的序列当前取的这个人的最高得分,转移以后状态是新的区间和另一个人取,从中取最小值。决策的最小值也可递推。#includeusing namespace std;const int MX = 101;int d[MX][MX]... 阅读全文
posted @ 2015-09-29 17:47 陈瑞宇 阅读(194) 评论(0) 推荐(0) 编辑
摘要: 直接LCS是时间复杂度是O(p*q)的,但是序列元素各不相同,只要把其中一个序列映射成有序的,另外一个序列再做相同的映射,没有的直接删掉,就变成了求另一个序列LIS。#includeusing namespace std;int read(){ char c; while(c=getchar(... 阅读全文
posted @ 2015-09-29 17:40 陈瑞宇 阅读(264) 评论(0) 推荐(0) 编辑