洛谷P3052题解

题面

看起来非常简单,但是细节多的一批的状压DP入门题。
我设 \(f_i\)\(i\) 状态时最小分组数, \(g_i\)\(i\) 状态时最后一组剩余空间。
对于每一个 \(i\) ,枚举每一个 \(1\le j\le n\)\(j\) 不在 \(i\) 内, 即 \(i \& (1<<(j-1))=0\) 。然后分类讨论:

  1. \(j\) 可以放在最后一组中, \(f_{i | (1<< (j-1))}=\operatorname{min}\{f_{i | (1<< (j-1))},f_i\}, g_{i | (1<< (j-1))}=\operatorname{max}\{g_{i | (1<< (j-1))},g_i-a_j\}\)
  2. \(j\) 不能放在最后一组中, \(f_{i | (1<< (j-1))}=\operatorname{min}\{f_{i | (1<< (j-1))},f_i+1\}, g_{i | (1<< (j-1))}=\operatorname{max}\{g_{i | (1<< (j-1))},W-a_j\}\)

初始状态:\(f_0=1,g_0=W\),就是开一个空的组。其他的 \(f_i\)INF
答案就是 \(f_{(1<<n)-1}\)
代码

posted @ 2021-08-09 16:15  1358id  阅读(56)  评论(0编辑  收藏  举报