CodeForces - 425E Sereja and Sets 题解
题目大意:
我们有一个集合 S,其中包含了 m 个不完全相同的区间[l1,r1],[l2,r2]…[lm,rm] (1≤li≤ri≤n,li,ri 都为整数)。
定义 f(S)=k,表示集合 S 中能取出最多 k 个区间,使得这 k 个区间两两不相交。 问当 f(S)=k 时,符合条件的集合 S 有多少个。
思路:
f[i][j]表示集合S中所有区间的端点均小于等于i且f(S)=j的集合S的个数。
显然i≥j,则f[i][j]由f[k][j-1](j-1≤k≤i)转移而来,新的与之前区间不相交的区间的起点为k+1,k+1≤终点≤i,则有2i-k-1种选择出有且仅有一个区间与之前的区间不相交即有用区间(k+1为起点,有i-k个与之前的区间不相交,任取其中的多个或一个),而多出的无用区间即与之前的相交的区间的两个端点一个小于等于k一个大于k,则有(i-k)*k个,任取,有2(i-k)*k种,所以转移方程为f[i][j]=∑(f[k][j-1]*(2i-k-1)*2(i-k)*k)。
代码:
#include<cstdio>
#define mo 1000000007
long long mi[],f[][];
int i,j,k,n,m; int main()
{
scanf("%d%d",&n,&m),k=n*n>>;
for (mi[]=i=;i<k+;++i)
if ((mi[i]=mi[i-]<<)>=mo) mi[i]-=mo;
for (i=;i<=n;++i) f[i][]=;
for (i=;i<=n;++i)
for (j=;j<=i;++j)
for (k=j-;k<=i;++k)
f[i][j]=(f[i][j]+f[k][j-]*(mi[i-k]-)%mo*mi[(i-k)*k])%mo;
printf("%lld\n",f[n][m]);
return ;
}
CodeForces - 425E Sereja and Sets 题解的更多相关文章
- Codeforces 425E Sereja and Sets dp
Sereja and Sets 我们先考虑对于一堆线段我们怎么求最大的不相交的线段数量. 我们先按 r 排序, 然后能选就选. 所以我们能想到我们用$dp[ i ][ j ]$表示已经选了 i 个线段 ...
- CodeForces 425E Sereja and Sets
意甲冠军: 集S它包括了很多间隔[l,r] 和1<=l<=r<=n f(S)个不相交的区间 问给出n和f(S) 有几种可能的S集合 思路: dp好题 至于为啥是dp- 我 ...
- Codeforces Round #182 (Div. 1)题解【ABCD】
Codeforces Round #182 (Div. 1)题解 A题:Yaroslav and Sequence1 题意: 给你\(2*n+1\)个元素,你每次可以进行无数种操作,每次操作必须选择其 ...
- Codeforces Round #608 (Div. 2) 题解
目录 Codeforces Round #608 (Div. 2) 题解 前言 A. Suits 题意 做法 程序 B. Blocks 题意 做法 程序 C. Shawarma Tent 题意 做法 ...
- Codeforces Round #525 (Div. 2)题解
Codeforces Round #525 (Div. 2)题解 题解 CF1088A [Ehab and another construction problem] 依据题意枚举即可 # inclu ...
- Codeforces Round #528 (Div. 2)题解
Codeforces Round #528 (Div. 2)题解 A. Right-Left Cipher 很明显这道题按题意逆序解码即可 Code: # include <bits/stdc+ ...
- Codeforces Round #466 (Div. 2) 题解940A 940B 940C 940D 940E 940F
Codeforces Round #466 (Div. 2) 题解 A.Points on the line 题目大意: 给你一个数列,定义数列的权值为最大值减去最小值,问最少删除几个数,使得数列的权 ...
- Codeforces Round #677 (Div. 3) 题解
Codeforces Round #677 (Div. 3) 题解 A. Boring Apartments 题目 题解 简单签到题,直接数,小于这个数的\(+10\). 代码 #include &l ...
- Codeforces Round #665 (Div. 2) 题解
Codeforces Round #665 (Div. 2) 题解 写得有点晚了,估计都官方题解看完切掉了,没人看我的了qaq. 目录 Codeforces Round #665 (Div. 2) 题 ...
随机推荐
- Android偏好设置(1)概述和Preferences简介
1.Overview Instead of using View objects to build the user interface, settings are built using vario ...
- Android上的线程安全
Thread-safe methods In some situations, the methods you implement might be called from more than one ...
- 189 Rotate Array 旋转数组
将包含 n 个元素的数组向右旋转 k 步.例如,如果 n = 7 , k = 3,给定数组 [1,2,3,4,5,6,7] ,向右旋转后的结果为 [5,6,7,1,2,3,4].注意:尽可能找 ...
- 219 Contains Duplicate II 存在重复 II
给定一个整数数组和一个整数 k,判断数组中是否存在两个不同的索引 i 和 j,使 nums [i] = nums [j],并且 i 和 j 的绝对差值最大为 k. 详见:https://leetcod ...
- ural1437
1437 记忆化 模拟倒水过程 #include <iostream> #include<cstdio> #include<cstring> #include< ...
- jQuery委托
$('#container').on('click', '.elementClass', function() { // code }); http://stackoverflow.com/quest ...
- Sping Boot返回Json格式自定义
转载请注明http://www.cnblogs.com/majianming/p/8491020.html 在写项目过程中,遇到了需要定义返回的json字段格式的问题 例如在实体属性中,我有一个字段是 ...
- 构建一个.net的干货类库,以便于快速的开发 - 验证码
一个验证码对于一个网站的作用不言而喻,而随着技术的发展验证码的种类也开始多了起来,发展至今很多网站已经不再使用一种验证码,为满足需求程序猿就要写很多的方法来适应需求,今天我就来介绍我之前收集到的验证码 ...
- [转] 一个U盘病毒简单分析
(转自:一个U盘病毒简单分析 - 瑞星网 原文日期:2014.03.25) U盘这个移动存储设备由于体积小.容量大.便于携带等优点,给人们的存储数据带来了很大的便利.但正是由于这种便利,也给病毒有 ...
- scrapy 的分页爬取 CrawlSpider
1.创建scrapy工程:scrapy startproject projectName 2.创建爬虫文件:scrapy genspider -t crawl spiderName www.xxx.c ...