【每日一题】Moovie Mooving

Moovie Mooving

https://ac.nowcoder.com/acm/problem/24158

Translation(from 洛谷)

奶牛贝西想连续看L (1 <= L <= 100,000,000)分钟的电影,有 N (1 <= N <= 20)部电影可供选择,每部电影会在一天的不同时段放映。

贝西可以在一部电影播放过程中的任何时间进入或退出放映厅。但她不愿意重复看到一部电影,所以每部电影她最多看到一次。她也不能在看一部电影的过程中,换到另一个正在播放相同电影的放映厅。

请帮贝西计算她能够做到从0到L分钟连续不断地观看电影,如果能,请计算她最少看几部电影就行了。

Solution

看见 的时候我就猜要用状压 , 但是继续读题读不懂题意
果断跑去洛谷看翻译, 恍然大悟(英语菜鸡实锤 慢着, 这题是紫题?)
考虑用二进制去枚举选择哪一部电影
表示状态为 的时候花费的最多连续时间
我们在枚举的时候可以二分查找 () 满足当前时间的最优电影时间
因为每部电影有他的放映时间, 我们要求最少的电影数
肯定是尽可能让时间往后使得错过放映时间
当连续时间大于 的时候, 计算当前状态的二进制位上有多少个
更新答案, 取最优即可
注意不存在的时候要输出 , 被坑了一下

Code

/*
  autor: Kurisu
*/
#include<bits/stdc++.h>
using namespace std;
typedef long long ll;

const long long inf = 1e14;
const int N = 1e6 + 5;
const double eps = 1e-10;
const ll mod = 1e9 + 7;

struct node {
  int p;
  int val[1005];
}a[25];
int dp[1 << 22];
int main() {
  ios::sync_with_stdio(false), cin.tie(nullptr);
  int n, l;
  cin >> n >> l;
  for(int i = 0; i < n; i++) {
    cin >> a[i].p >> a[i].val[0];
    for(int j = 1; j <= a[i].val[0]; j++) {
      cin >> a[i].val[j];
    }
  }
  int ans = 1e9;
  memset(dp, -1, sizeof(dp));
  dp[0] = 0;
  for(int i = 0; i < (1LL << n); i++) {
    if(dp[i] == -1) continue; // 尚未到达/不存在的状态
    for(int j = 0; j < n; j++) {
      if(!(i & (1LL << j))) { // 没选过
        int pos = upper_bound(a[j].val + 1, a[j].val + a[j].val[0] + 1, dp[i]) - a[j].val;
        if(pos > 1) dp[i | (1LL << j)] = max(dp[i | (1LL << j)], a[j].val[pos - 1] + a[j].p); 
        else dp[i | (1LL << j)] = dp[i];
      }
    }
    if(dp[i] >= l) {
      ans = min(ans, __builtin_popcount(i));
    }
  }
  if(ans != 1e9)
    cout << ans << "\n";
  else cout << -1 << "\n";
  return 0;
}
Kurisu与牛客的每日一题 文章被收录于专栏

每日一题

全部评论

相关推荐

不愿透露姓名的神秘牛友
06-24 14:18
点赞 评论 收藏
分享
06-15 02:05
已编辑
南昌航空大学 数据分析师
Eason三木:你如果想干技术岗,那几个发公众号合唱比赛的经历就去掉,优秀团员去掉,求职没用。然后CET4这种不是奖项,是技能,放到下面的专业技能里或者单独列一个英语能力。 另外好好改改你的排版,首行缩进完全没有必要,行间距好好调调,别让字和标题背景黏在一起,你下面说能做高质量PPT你得展现出来啊,你这简历排版我用PPT做的都能比你做的好。 然后自我评价,你如果要干数据工程师,抗压能力强最起码得有吧。
点赞 评论 收藏
分享
06-12 17:46
门头沟学院 Java
运营你豪哥:来说重点: ​1.项目前置,时间倒序。​​ 2.​项目描述强化结果与量化效果(STAR原则里的R)。​​ ​3.个人技能精炼,明确掌握程度,突出核心。​​ ​4.增加强有力开头的个人总结部分。​​ 5.​优化教育背景(成绩排名)、合并奖项与活动。​​
点赞 评论 收藏
分享
感觉他们一点都不了解现在这个社会就业有多难,已经在牛客刷到好多篇&nbsp;延毕的帖子了,延毕就会导致已经找好的工作就没了,还得重新再找,学校和老师们是怎么想的呢????看到学生丢失工作会开心吗&nbsp;就业数据都在造假,真实的就业困难不去解决&nbsp;一个个真是好样的
从今天开始狠狠卷JVAV_癫:学生看到的是导师不放实习导致offer黄了。 导师看到的是招进来的学生吃自己补助和自己的招生名额,却没给自己升迁带来任何帮助,还要跑路。 根本利益的不一致,最主要留校的导师大概率是职场上招聘失败的,被迫留校的,什么牛鬼蛇神都会有
点赞 评论 收藏
分享
评论
2
收藏
分享

创作者周榜

更多
牛客网
牛客网在线编程
牛客网题解
牛客企业服务