[USACO15JAN]电影移动Moovie Mooving

[USACO15JAN]电影移动Moovie Mooving

挺无语的状态压缩题目,太显然了.

\(f[i]\)表示状态为i的最远到达的距离.

然后暴力枚举每一个可行的点.

然后二分一下即可..

/*header*/
#include <iostream>
#include <cstdio>
#include <cstring>
#include <algorithm>
#include <vector>
#include <cmath>
#define rep(i , x, p) for(int i = x;i <= p;++ i)
#define sep(i , x, p) for(int i = x;i >= p;-- i)
#define gc getchar()
#define pc putchar
#define ll long long
#define mk make_pair
#define fi first
#define se second
using std::min;
using std::max;
using std::swap;
const int maxN = 20 + 3;

inline int gi() {
  int x = 0,f = 1;char c = gc;
  while(c < '0' || c > '9') {if(c == '-')f = -1;c = gc;}
  while(c >= '0' && c <= '9') {x = x * 10 + c - '0';c = gc;}return x * f;
}

void print(int x) {
  if(x < 0) pc('-') , x = -x;
  if(x >= 10) print(x / 10);
  pc(x % 10 + '0');
}

int f[1048600] , time[maxN], beg[maxN][1007] , num[1048600];

int search(int p , int x) {
    int l = 1 , r = time[p] , mid , ans = -1;
    while(l <= r) {
        mid = (l + r) >> 1;
        if(beg[p][mid] <= x)
            ans = mid , l = mid + 1;
        else r = mid - 1;
    }
    return ans;
}

int main() {
    int n = gi() , L = gi();
    rep(i , 1, n) {
        time[i] = gi();
        int m = gi();
        rep(j , 1, m) beg[i][j] = gi();
    }
    memset(f , 0x3f, sizeof(f));
    f[0] = 0;
    rep(i , 1, (1 << n) - 1) {
        rep(j , 1, n) {
            if(i & (1 << j - 1)) {
                int p = search(j , f[i ^ (1 << (j - 1))]);
                if(p != -1) f[i] = max(f[i] , beg[j][p] + time[j]);
            }
        }
    }
    int ans = 1e9;
    rep(i , 1, (1 << n) - 1) {
    num[i] = num[i - (i & (-i))] + 1;
    if(f[i] >= m) ans = min(ans , num[i]);
    }
    printf("%d\n", ans == 1e9 ? -1 : ans);
    return 0;
}

原文地址:https://www.cnblogs.com/gzygzy/p/10262593.html

时间: 2024-08-29 15:29:04

[USACO15JAN]电影移动Moovie Mooving的相关文章

bzoj3886: [Usaco2015 Jan]Moovie Mooving

题意: PoPoQQQ要在电影院里呆L分钟,这段时间他要看小型电影度过.电影一共N部,每部都播放于若干段可能重叠的区间,PoPoQQQ决不会看同一部电影两次.现在问他要看最少几部电影才能度过这段时间? 注:必须看电影才能在电影院里呆着,同时一场电影可以在其播放区间内任意时间入场出场.N=20.每部电影的重复区间<=100. =>N=20.那么我们还是考虑二进制枚举.转移方程类似.时间复杂度类似.哎呀套路啊... #include<cstdio> #include<cstrin

【BZOJ3886】【Usaco2015 Jan】Moovie Mooving 状态压缩 动态规划

广告: #include <stdio.h> int main() { puts("转载请注明出处[vmurder]谢谢"); puts("网址:blog.csdn.net/vmurder/article/details/44040735"); } 题意: PoPoQQQ要在电影院里呆L分钟,这段时间他要看小型电影度过.电影一共N部,每部都播放于若干段可能重叠的区间,PoPoQQQ决不会看同一部电影两次.现在问他要看最少几部电影才能度过这段时间? 注:必

基于Spark MLlib平台的协同过滤算法---电影推荐系统

基于Spark MLlib平台的协同过滤算法---电影推荐系统 又好一阵子没有写文章了,阿弥陀佛...最近项目中要做理财推荐,所以,回过头来回顾一下协同过滤算法在推荐系统中的应用. 说到推荐系统,大家可能立马会想到协同过滤算法.本文基于Spark MLlib平台实现一个向用户推荐电影的简单应用.其中,主要包括三部分内容: 协同过滤算法概述 基于模型的协同过滤应用---电影推荐 实时推荐架构分析     一.协同过滤算法概述 本人对算法的研究,目前还不是很深入,这里简单的介绍下其工作原理. 通常,

微信小程序豆瓣电影项目的改造过程经验分享

在学习微信小程序开发过程中,一部分的难点是前端逻辑的处理,也就是对前端JS的代码编辑:一部分的难点是前端界面的设计展示:本篇随笔基于一个豆瓣电影接口的小程序开源项目进行重新调整,把其中遇到的相关难点和改进的地方进行讨论介绍,希望给大家提供一个参考的思路,本篇随笔是基于前人小程序的项目基础上进行的改进,因此在开篇之前首先对原作者的辛劳致敬及感谢. 1.豆瓣电影接口的小程序项目情况 豆瓣电影接口提供了很多相关的接口给我们使用,豆瓣电影接口的API地址如下所示:https://developers.d

【BZOJ2227】【ZJOI2011】看电影 [组合数学][质因数分解]

看电影 Time Limit: 10 Sec  Memory Limit: 259 MB[Submit][Status][Discuss] Description 到了难得的假期,小白班上组织大家去看电影.但由于假期里看电影的人太多,很难做到让全班看上同一场电影,最后大家在一个偏僻的小胡同里找到了一家电影院.但这家电影院分配座位的方式很特殊,具体方式如下: 1. 电影院的座位共有K个,并被标号为1…K,每个人买完票后会被随机指定一个座位,具体来说是从1…K中等可能的随机选取一个正整数,设其为L.

豆瓣电影

豆瓣电影 要我用Markdown重新写,弄得我特地去学习了一下语法,瞎搞了几下,不管了 上一节写了一个首页列表的展示,现在我们需要一个效果: 点击每个列表项,能后看到更多的细节和大图.在本页面展示或者加个弹窗是基本不可能的了.下面我们就创建一个新的页面来展示更多细节(我们之前已经创建了2个页面,其中rank页面还是空的,这里故意先不写,后面自然会补在) 在pages下创建新的文件夹:detail,同时创建4个detail文件js,json,wxml,wxss 对于每一个页面都需要写到app.js

电影功夫熊猫使用的单词分析

你英语四级过了吗?功夫熊猫看了吗?功夫熊猫使用了995个英语单词,你会说很简单吧,别急,我给你分析一下,这些单词中有236个单词不在四级词汇范围内,花两分钟时间看看你是否认识这些单词,单词后面跟的数字表示该单词在电影中出现的次数. 你也可以获取本文的分析程序,这样你就可以分析其他电影了.看一部电影之前,先通过这种方式分析一下,然后学习自己不认识的单词,然后再去看电影,如此这样坚持下去,英语水平就会有很大的提升. words(995): 1. you 2492. the 1893. i 1844.

java电影网站开发经验2

其实我没没怎么写过技术博客,上学的时候看见作文就头疼的,所以有些地方些的不通顺望见谅,闲话少数入正题. 其实开发一个小网站不是太难,选个自己比较熟悉的语言,找些开源的技术.实在不想自己开发就直接找个开源的放倒网上也不错.之前我是找了些开源的网 站,java开源的网站确实赶不上php的.所以我曾经用php开源论坛phpwind搭建了一个bbs,php本人没怎么研究过,改起来比较费劲.最后 也是终于弄出来了个东西,但是网站定位问题加上那段时间比较忙,所以就夭折了. 不管怎么弄,网站有了后,就是域名的

java电影网站开发

工作之余,干净没事可做,然后就想着用自己的知识去干点什么,不求影响别人吧,起码给自己一个方向,培养自己的一点乐趣.最终想做一个电影网站,自己也当一次神圣的站长.网站地址是http://v8dy.net 自己搭建网站道路是挺坎坷的,首先得评估下吧,用什么技术开发快效率高,毕竟是业余时间弄,时间不是太充裕的,(唯快不破!). 首先是选择了最近比较火的jfinal ,首先介绍下他的有点,第一,容易上手,开发文档看起来易懂,我是去公司路上看了半个小时,然后晚上回来就开始用,.真不夸张.就是易上手:第二,