摘要: 从本质入手,这个东西影响取值的就是相邻两个哪个先取 设f[i][0/1]为前i个(i 1,i)中先取i/i 1的值(这里不算上i的贡献 转移就显然了,注意要先复制 inf cpp include include using namespace std; const int N=3005; int n 阅读全文
posted @ 2019-06-17 21:14 lokiii 阅读(247) 评论(0) 推荐(1) 编辑
摘要: 首先看这样做的特点,就是分到最后小块里的点合并上去的时候相对顺序不变,所以先加上块内逆序对的期望 合并的时候一定是一边卡住一个大值,另一边跳指针,所以把一个值向右直到有大于它的值位置的一段区间看作一段 当前合并两块合并到第i个和第j个,如果i和j都是块的开头就一定不会构成逆序对,因为双指针的时候会直 阅读全文
posted @ 2019-06-17 17:00 lokiii 阅读(245) 评论(0) 推荐(1) 编辑
摘要: 设f[i]为i个积木能堆出来的种类,g[i]为i个积木能堆出来的种类和 $$ f[n]=\sum_{i=1}^{n}C_{n}^{i}g[n i] $$ $$ g[n]=\sum_{i=1}^{n}C_{n}^{i}f[n i]+g[n] $$ 理解就是选出包含最后一个的块,然后剩下的按照之前的拼 阅读全文
posted @ 2019-06-17 09:33 lokiii 阅读(165) 评论(0) 推荐(0) 编辑