2024.11.13 DP题单

news/2025/1/12 11:56:59/文章来源:https://www.cnblogs.com/Kang-shifu/p/18544867

录制唱片

你刚刚继承了流行的 “破锣摇滚” 乐队录制的尚未发表的 \(N\)\(1\leq N\leq 20\))首歌的版权。你打算从中精选一些歌曲,发行 \(M\)\(1\leq M\leq 20\))张 CD。每一张 CD 最多可以容纳 \(T\)\(1\leq T\leq 20\))分钟的音乐,一首歌不能分装在两张 CD 中。CD 数量可以用完,也可以不用完。

不巧你是一位古典音乐迷,不懂如何判定这些歌的艺术价值。于是你决定根据以下标准进行选择:

  • 1.歌曲必须按照创作的时间顺序在所有的 CD 盘上出现。(注:第 \(i\) 张盘的最后一首的创作时间要早于第 \(i+1\) 张盘的第一首)

  • 2.选中的歌曲数目尽可能地多。



f[i][j][k]表示第i个CD,现在取到了第j首歌,此CD已存k分钟的歌了。

for(int i=0;i<m;i++){//枚举CDfor(int j=1;j<=n;j++){//枚举所选的歌for(int k=0;k+a[j]<=t;k++){//枚举此CD已经存了多少分钟for(int l=j-1;l>=0;l--){//枚举上一个CD取到了哪for(int c=0;c<=t;c++){f[i+1][j][k+a[j]]=max(f[i+1][j][k+a[j]],f[i][l][c]+1);}//第一种情况,这个CD还没用过。f[i+1][j][k+a[j]]=max(f[i+1][j][k+a[j]],f[i+1][l][k]+1);//第二种情况,这个CD已用了k分钟。ss=max(ss,f[i+1][j][k+a[j]]);//时刻更新最大值。}}}}

路短最

你可以通过许多的算法找到从一个地方到另外一个地方的最短路径。人们在他们的车上安装 GPS 设备然后他们的手机告诉他们最快的到达目的地的方式。然而,当在假期时,Troy 喜欢慢慢旅游。他想找最长的到目的地的路径以便他可以在路途中看许多新的以及有趣的地方。

因此,一个有效的路径包含一个不同城市的序列 \(c_1,c_2,...,c_k\),并且对于每个 \(1\le i<k\),有道路从 \(c_i\) 通往 \(c_{i+1}\)

他不想重复访问任何城市,请帮他找出最长路径。

对于 \(100\%\) 的数据,有 \(2\le n \le 18,\) \(1\le m \le n^2-n,\) \(0\le s,d \le n-1,\) \(s\neq d,\) \(1\le l\le 10000\)

明显可以状压,把每个城市的访问状态压到一位,Fij存i状态时在j城市的最长路。

Cloakroom

\(n\) 件物品,每件物品有三个属性 \(a_i, b_i, c_i\ (a_i<b_i)\)。注意输入顺序为 \(c_i, a_i, b_i\)

再给出 \(q\) 个询问,每个询问由非负整数 \(m, k, s\) 组成,问是否能够选出某些物品使得:

  1. 对于每个选的物品 \(i\),满足 \(a_i\le m\)\(b_i>m+s\)
  2. 所有选出物品的 \(c_i\) 的和正好是 \(k\)

\(1\le n\le 1000\)\(1\le a_i<b_i\le 10^9\)\(1\le c_i\le 1000\)

\(1\le q\le 10^6\)\(1\le m\le 10^9\)\(1\le k\le 10^5\)\(0\le s\le 10^9\)

把询问离线下来,把物品按a排序,询问按m排序。Fk表示当前考虑的物品c和恰好为k时的b被最大化的最小值。

image
神仙状态,反正我想不出来。

#include<bits/stdc++.h>
#define int long long
#define inf 9000000000000000000
using namespace std;
struct S{int a, b, c;
} a[1050];
constexpr int maxn = 2e6+10;
struct Q{int m, k, s, i;
} q[maxn];
int n, m, f[maxn];
bool b[maxn];
bool cmp1(S x, S y) { return x.a < y.a; }
bool cmp2(Q x, Q y) { return x.m < y.m; }
signed main(){scanf("%lld", &n);for (int i = 0; i < n; ++i)scanf("%lld%lld%lld", &a[i].c, &a[i].a, &a[i].b);sort(a, a + n, cmp1);scanf("%lld", &m);for (int i = 0; i < m; ++i)scanf("%lld%lld%lld", &q[i].m, &q[i].k, &q[i].s), q[i].i = i;sort(q, q + m, cmp2);f[0] = inf;for (int i = 0, j = 0; i < m; ++i){for (; j < n && a[j].a <= q[i].m; ++j)for (int l = 1e5; l >= a[j].c; --l)f[l] = max(f[l], min(f[l - a[j].c], a[j].b));b[q[i].i] = f[q[i].k] > q[i].m + q[i].s;}for (int i = 0; i < m; ++i)puts(b[i] ? "TAK" : "NIE");return 0;
}

奶牛看电影

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

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

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

来不及实现了,先写思路。
一眼状压,发现不会了。
考虑看题解
状态是1e6的,显然压不进去别的东西了,而且最优解已经在状态里了。
所以我们dp里存另一个要最优化的东西。Fi表示状态为i时最晚的结束时间,我们要最化这个东西。显然转移的时候可以二分到没有空隙的最近一场即将开始的电影一定是最优的。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.hqwc.cn/news/833159.html

如若内容造成侵权/违法违规/事实不符,请联系编程知识网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

基于HASM模型的高精度建模matlab仿真

1.程序功能描述 本课题主要使用HASM进行高精度建模,主要对HASM模型进行介绍以及在实际中如何进行简化实现的。HASM原始的模型如下所示: 2.测试软件版本以及运行结果展示MATLAB2022A版本运行 3.核心程序%第一类基本变量E(i,j) = 1 + (( f(i,j+1,n) - f(i,j-1,n) )/( …

CICD04 Jenkins容器化CICD实现及分布式构建, 流水线Pipeline ubuntu使用

2.14.3 案例: 基于 Docker 插件实现自由风格任务实现 Docker 镜像 制作 不如前面的直接脚本编写灵活 2.14.3.2 安装插件 docker-build-step jenkins上安装 docker-build-step 插件#选择jenkins使用的docker服务 #左侧系统管理,右侧系统配置,Docker Builder下Docker URL输入 u…

数据类型和运算符

数据类型 动态类型编程语言运行时判断静态类型的编程语言 : Go 、C 、在开发的时候,就需要给一些定义的变量赋值空间大小。C 需要自己去开辟这个空间数据类型 : 每种在Go语言中出现的基本数据类型,会有一个默认的空间大小。 1、布尔类型数据 布尔型的值只可以是常量 true 或…

XXL JOB DockerCompose部署

官网给的方式是 Docker 命令启动,但是用起来太麻烦了,所以用DockerCompose 简化部署 创建数据库,导入 SQL SQL 脚本位置为/xxl-job/doc/db/tables_xxl_job.sql https://raw.githubusercontent.com/xuxueli/xxl-job/refs/heads/master/doc/db/tables_xxl_job.sql 编写 Docker…

CICD02 Jenkins安装,备份还原, 实现CICD核心功能 ubuntu使用

DevOps 之 CICD 服务器 Jenkins 1 Jenkins 部署与基本配置 1.2 Jenkins 安装和启动 1.2.1 Jenkins 的安装 Jenkins支持多种安装方法 1.包安装 2.JAVA的WAR文件 #要手动配置,不太方便 3.容器运行#系统要求 最低推荐配置:1.256MB可用内存2.1GB可用磁盘空间(作为一个Docker容…

CICD01 Git, GitLab, 部署方式 ubuntu使用

版本管理系统 Git 和 GitLab 1 DevOps 简介 1.3 持续集成、持续交付和持续部署 CICD CICD: 持续集成, 持续交付, 持续部署 1.6 常见的软件部署模式 生产中 蓝绿部署 和 金丝雀用的比较多 1.6.1 蓝绿部署 Blue-green Deployments 一个和生产环境一样的预发布环境, 和生产环…

jvm 垃圾回收算法的评价标准

如何实现回收的(核心思想): 1. 找到内存中存活的对象(与GC Root相关联) 2. 释放不再存活对象的内存,使得程序能再次利用这部分空间 --------------------------------------------------------------------------------- 垃圾回收算法的分类: -------- ----------------…

GO面试-切片

一、结构介绍 切片(Slice)在 Go 语言中,有一个很常用的数据结构,切片是一个拥有相同类型元素的可变长度的序列,它是基于数组类型做的一层封装。它非常灵活,支持自动扩容。并发不安全。 切片是一种引用类型,它有三个属性:指针,长度和容量。 底层源码定义: type slice …

系统管理体系——软件包管理

1.Linux系统管理体系——软件包管理Linux下面的软件包格式为:rpm格式(红帽系列系统,CentOS,麒麟系统)或deb格式(Debian,Ubuntu)安装软件方式 举例 说明 应用场景yum/apt 方式 点外卖,缺啥少啥,外卖解 决 通过网络下载软件包,替我们安装, 如果 有依赖自动下载依赖并安装. …

Linux12位权限管理体

1. Linux12位权限管理体 1.1 权限管理概述Linux通过rwx3种权限控制系统与保护系统,组成9位权限. Linux权限体系中还有3位特殊权限,组合起来就是12位权限体系. Linux这简单的rwx控制整个Linux系统的安全,权限与用户共同组成Linux系统的安全防护体系.1.2 Linux权限计算 2.0 rwx权…

Java流程控制(三)

用户交互Scanner(java.util.Scanner获取用户的输入)//基本语法 Scanner s = new Scanner(System.in)通过Scanner类的next()与nextLine()方法获取输入的字符串,使用hasNext()与hasNextLine()判断是否还有输入的数据(Next不能得到带有空格的字符串,NextLine可以获得空白)im…

0.1+0.2=0.30000000000000004

看下效果这个网站能找到你想要的答案 https://0.30000000000000004.com/ 十进制转二进制 十进制整数转换为二进制整数采用"除2取余,逆序排列"法。 具体做法是:用2整除十进制整数,可以得到一个商和余数; 再用2去除商,又会得到一个商和余数,如此进行,直到商为小…