f[i]表示用i集合内的电影可以达到的最长时间

f[i]向f[i|(1<<j)]更新,此时的时间为第j部电影在f[i]前的最晚上映时间

先排序一遍离散化后用前缀最大值解决

时间复杂度$O(n2^n)$

#include<cstdio>
#include<algorithm>
const int N=20,M=40010;
int n,l,i,j,c,d[N],g[N][M],m,q[M],id[M],t[M],f[1<<N],ans=M;
inline bool cmp(int x,int y){return t[x]<t[y];}
inline void min(int b){if(ans>b)ans=b;}
inline void max(int&a,int b){if(a<b)a=b;}
inline int lower(int x){
int l=1,r=m,mid,t;
while(l<=r)if(::t[q[mid=(l+r)>>1]]>=x)r=(t=mid)-1;else l=mid+1;
return t;
}
int main(){
for(scanf("%d%d",&n,&l);i<n;i++)for(scanf("%d%d",&d[i],&c);c--;id[++m]=i,t[m]=j,id[++m]=-1,t[m]=j+d[i])scanf("%d",&j);
for(id[++m]=-1,t[m]=l,id[++m]=-1,i=1;i<=m;i++)q[i]=i;
for(std::sort(q+1,q+m+1,cmp),l=lower(l),i=1;i<=m;i++)if(~id[i])g[id[i]][lower(t[i])]=lower(t[i]+d[id[i]]);
for(i=0;i<n;i++)for(j=1;j<=m;j++)if(!g[i][j])g[i][j]=g[i][j-1];
for(f[i=0]=1;i<(1<<n);i++)if(f[i]){
if(f[i]>=l){min(__builtin_popcount(i));continue;}
for(j=0;j<n;j++)if(!(i>>j&1))max(f[i|(1<<j)],g[j][f[i]]);
}
return printf("%d",ans<M?ans:-1),0;
}

  

BZOJ3886 : [Usaco2015 Jan]Moovie Mooving的更多相关文章

  1. 【bzoj3886】[Usaco2015 Jan]Moovie Mooving 状态压缩dp+二分

    题目描述 Bessie is out at the movies. Being mischievous as always, she has decided to hide from Farmer J ...

  2. [Usaco2015 Jan]Moovie Mooving

    Description Bessie is out at the movies. Being mischievous as always, she has decided to hide from F ...

  3. 3890: [Usaco2015 Jan]Meeting Time( dp )

    简单的拓扑图dp.. A(i, j), B(i, j) 表示从点 i 长度为 j 的两种路径是否存在. 用bitset就行了 时间复杂度O(m) --------------------------- ...

  4. [USACO15JAN]电影移动Moovie Mooving

    [USACO15JAN]电影移动Moovie Mooving 时间限制: 2 Sec  内存限制: 128 MB 题目描述 Bessie is out at the movies. Being mis ...

  5. [补档][Usaco2015 Jan]Grass Cownoisseur

    [Usaco2015 Jan]Grass Cownoisseur 题目 给一个有向图,然后选一条路径起点终点都为1的路径出来,有一次机会可以沿某条边逆方向走,问最多有多少个点可以被经过? (一个点在路 ...

  6. BZOJ3887 [Usaco2015 Jan] Grass Cownoisseur 【tarjan】【DP】*

    BZOJ3887 [Usaco2015 Jan] Grass Cownoisseur Description In an effort to better manage the grazing pat ...

  7. bzoj3887: [Usaco2015 Jan]Grass Cownoisseur

    题意: 给一个有向图,然后选一条路径起点终点都为1的路径出来,有一次机会可以沿某条边逆方向走,问最多有多少个点可以被经过?(一个点在路径中无论出现多少正整数次对答案的贡献均为1) =>有向图我们 ...

  8. BZOJ_3887_[Usaco2015 Jan]Grass Cownoisseur_强连通分量+拓扑排序+DP

    BZOJ_3887_[Usaco2015 Jan]Grass Cownoisseur_强连通分量+拓扑排序+DP Description In an effort to better manage t ...

  9. [bzoj3887][Usaco2015 Jan]Grass Cownoisseur_trajan_拓扑排序_拓扑序dp

    [Usaco2015 Jan]Grass Cownoisseur 题目大意:给一个有向图,然后选一条路径起点终点都为1的路径出来,有一次机会可以沿某条边逆方向走,问最多有多少个点可以被经过?(一个点在 ...

随机推荐

  1. python学习之最简单的用户注册及登录验证小程序

    文章都是从我的个人博客上粘贴过来的哦,更多内容请点击 http://www.iwangzheng.com 正如很多同学所知道的,楼主开始学习python了,前进的道路曲曲折折,有荆棘也有陷阱,从最简单 ...

  2. centos7下cups + samba共打印服务的教程

    centos7系统我们用到的不多但是这款系统比centos6功能要强大了不少,下文来介绍一篇centos7下cups + samba,共打印服务的例子,具体如下所示.   这个算是rhce课程的篇外篇 ...

  3. ubuntu12 apache2部署多个网站的方法

    由于对apache2的配置不是很精通.吃了不少瘪. 这里总结下,希望对碰到同样问题的人带来帮助: 假设需求是有两个站点,site1和site2.其端口分别为80和8080. 1. 配置监听端口 修改 ...

  4. Linux--YUM 安装 nginx php mysql

    Linux--YUM 安装 nginx php mysql (2011-11-13 11:27:14) 转载▼ 标签: 杂谈 分类: Linux 1.先新建一个 repo # vi /etc/yum. ...

  5. 【云计算】docker的小知识,帮你更深入理解容器技术

    关于docker的15个小tip   1. 获取最近运行容器的id 这是我们经常会用到的一个操作,按照官方示例,你可以这样做(环境ubuntu): $ ID=$(docker run ubuntu e ...

  6. 在Python脚本中判断Python的版本

    引自:http://segmentfault.com/q/1010000000127878 如果是给人读,用 sys.version,如果是给机器比较,用 sys.version_info,如果是判断 ...

  7. js 去掉input标签中的百分号【%】

    parseInt("100%") --100 parseFloat("17%")     --17

  8. local variable 'xxx' referenced before assignment

    这个问题很囧,在外面定义了一个变量 xxx ,然后在python的一个函数或类里面引用这个变量,并改变它的值,结果报错local variable 'xxx' referenced before as ...

  9. MySQL入门书籍和方法分享

    本文罗列了一些适用于MySQL及运维入门和进阶使用的书籍. 背景:各大论坛上总是有很多同学咨询想学习数据库,或者是为入行DBA做些准备.几年来作为一个MySQL DBA的成长过程有一些积累和感悟,特此 ...

  10. 11.python之线程,协程,进程,

    一,进程与线程 1.什么是线程 线程是操作系统能够进行运算调度的最小单位.它被包含在进程之中,是进程中的实际运作单位.一条线程指的是进程中一个单一顺序的控制流,一个进程中可以并发多个线程,每条线程并行 ...