Codeforce 215 div1

C

  把每个qi看成点,则问题转化为:求一个最大的k,遍历k个点的完全图需要的最小步数+1不超过n,

  (这里+1的原因是把起点加进去)

  讨论k的奇偶:

  k为奇数,每个点度数为偶数,这是一个欧拉回路,步数为边数;

  k为偶数,每个点度数为奇数,保留2个奇度数点,将剩下的点度数改造成偶数,需要(k-2)/2步,然后得到一个欧拉图;

  于是得到公式.

D

  考虑d个数属于的集合mask,那么可以确定 总集合^mask 的集合是不符合要求的(它的子集也是不符合要求的),于是可以排除所有的"bad mask".

E

  首先注意到数组范围n*m<=100000,于是可以确定n的上限(n<=400),为了满足区间相互不包含,要保证对于 li-1<li && ri-1<ri

  所以,如果知道当前取的左端点集合和右端点集合,那么方案已经唯一确定了,根据这个性质可以用dp[i][j][k]统计:

  dp[i][j][k]表示加入前i个数,j个左端点k个右端点的方案数;

  转移有4种情况对应:i不加入,i为左端点,i为右端点,i为左端点和右端点.

  显然必须满足j>=k,最后答案为dp[m][n][n];

  为了满足"必定存在x为左端点的区间"当加入x时要强制转移.

上一篇:Semaphore 信号量


下一篇:HDU 1824 Let's go home