P5985 [PA2019] Muzyka pop 题解

news/2025/1/15 13:05:46/文章来源:https://www.cnblogs.com/Rock-N-Roll/p/18412859

P5985 [PA2019] Muzyka pop 题解

是蛮有意思的一道题。

\(n\le 200\),第一感觉是区间 dp,但是又不好设出状态。考虑 \(b\) 单调递增的过程中的性质,考虑后得到 \(b\) 的最高含 \(1\) 的位一定是单调不降的,于是我们考虑将最高的含 \(1\) 的位设入状态。

第一反应是设 \(f_{i,j}\) 表示选了前 \(i\)\(a\),最高位 \(\le j\) 的最大值。设 \(s(l,r,i)\) 表示 \([l,r]\) 区间最高位都是 \(i\) 的方案数,则 \(f_{i,j}=\max\{f_{k,j-1}+s(k+1,i,j)\}\)。考虑 \(s(l,r,i)\) 的含义是确定了最高位,其它位不关心,于是 \(s(l,r,i)\) 实际上是 \([l,r]\) 区间最高位 \(\le j\) 的最大值 \(+\sum_{l}^r a_i\)

于是区间 dp 的定义式便容易得出:\(f_{i,l,r}\) 表示最高位 \(\le i\),选择 \([l,r]\) 的最大值。转移的式子是 \(f_{i,l,r}=\max\{f_{i-1,l,k}+f_{i-1,k+1,r}+\sum_{l}^r a_i \}\)。现在考虑加上 \(m\) 限制的情况。

依据常见的套路,我们再定义 \(g_{i,l,r}\) 表示最高位的赋值和 \(m\) 在这一位上的取值相同时的最大值。那么当 \(m\) 这一位为 \(0\) 时,\(g_{i,l,r}=g_{i-1,l,r}\)。否则 \(g_{i,l,r}=\max\{f_{i-1,l,k}+g_{i-1,k+1,r}+\sum_l^r a_i \}\)

需要注意的是这样 dp 无法处理一位上只取一个数的情形。套路地,我们预处理 \(f_{0,i,i-1}=g_{0,i,i-1}=0\),然后将 \(k\) 的范围改为枚举 \(k\in[l-1,r]\) 即可。

本题的关键是能将 最高的含 \(1\) 的位 设入状态,得出区间 dp 的套路,并得出 \(g\) 的转移定义。

代码:

#include <bits/stdc++.h>
#define int long long
#define N 205
using namespace std;
int n, m;
int a[N], sum[N];
int f[66][N][N], g[66][N][N];
signed main() {cin >> n >> m;for (int i = 1; i <= n; i++)scanf("%lld", &a[i]), sum[i] = sum[i - 1] + a[i];memset(f, -0x3f, sizeof f);memset(g, -0x3f, sizeof g);for (int i = 1; i <= n; i++) f[0][i][i] = g[0][i][i] = 0;	int M = ceil(log2(m)) + 1;for (int i = 0; i <= M; i++)for (int j = 1; j <= n + 1; j++)f[i][j][j - 1] = g[i][j][j - 1] = 0;for (int i = 1; i <= M; i++)for (int l = 1; l <= n; l++)for (int r = l; r <= n; r++) {for (int k = l - 1; k <= r; k++)f[i][l][r] = max(f[i][l][r], f[i - 1][l][k] + f[i - 1][k + 1][r] + sum[r] - sum[k]);g[i][l][r] = max(g[i][l][r], g[i - 1][l][r]);if (!((m >> (i - 1)) & 1))continue;for (int k = l - 1; k <= r; k++)g[i][l][r] = max(g[i][l][r], f[i - 1][l][k] + g[i - 1][k + 1][r] + sum[r] - sum[k]);}cout << g[M][1][n] << "\n";return 0;
} 

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

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

相关文章

章12——异常exception

异常 快捷键 ctrl + alt + t 选中 try-catch 如果进行异常处理,即使出现了异常,程序可以继续执行。异常介绍 开发过程中的语法错误和逻辑错误不是异常。 执行过程中所发生的异常事件可分为如下两大类:异常体系图小结:常见的运行时异常没有关联的类不能进行上下转型 异常处理…

APB总线总结

APB总结 一、简介 APB提供了一个低功耗的接口,并降低了接口的复杂性。APB接口用在低带宽和不需要高性能总线的外围设备上。APB是非流水线结构,所有的信号仅与时钟上升沿相关,这样就可以简化APB外围设备的设计流程,每个传输至少耗用两个周期。 二、信号列表信号名 来源 描述…

面试- Web安全

XSS攻击(跨站脚本攻击)XSS预防 < < > >XSRF(CSRF)攻击(跨站请求伪造)就像是你在不知情的情况下,被别人利用你的权限发起了某个你没打算进行的请求。重点是可以把你的用户信息给带过去,你不知不觉就帮我付款了。XSS 是恶意代码“潜伏”在页面上,欺骗你去执行…

k8s 中的 Service 简介【k8s 系列之二】

〇、前言 k8s 集群中的每一个 Pod 都有自己的 IP 地址,那么是不是有 IP 了,访问起来就简单了呢,其实不然。 因为在 k8s 中 Pod 不是持久性的,摧毁重建将获得新的 IP,客户端通过会变更 IP 来访问显然不合理。另外 Pod 还经常会通过多个副本来实现负载均衡,客户端如何高效的…

软工作业二:论文查重系统

这个作业属于哪个课程 <计科22级34班>这个作业要求在哪里 [<作业要求>](个人项目 - 作业 - 计科22级34班 - 班级博客 - 博客园 (cnblogs.com))这个作业的目标 通过实际编程任务,全面提升学生在编程、算法、项目管理、性能优化、代码测试和版本控制等方面的能力,为…

面试-JS基础知识-作用域和闭包

问题this的不同应用场景 手写bind函数 实际开发中闭包的应用场景,举例说明 创建10个<a>标签,点击的时候弹出来对应的序号作用域:某个变量的合法使用范围全局 函数 块级** 自由变量上面图的最里面的红框————a a1 a2都是自由变量,因为都没有被定义。会一层一层往上…

学习高校课程-软件设计模式-软件设计原则(lec2)

软件设计原则Feature of Good Design (1) 优秀设计的特点(一) Code reuse 代码复用 – Challenge: tight coupling between components, dependencies on concrete classes instead of interfaces, hardcoded operations – Solution: design patterns – 挑战:组件之间的紧…

ATTCK红队评估(红日靶场4)

靶场介绍本次靶场渗透反序列化漏洞、命令执行漏洞、Tomcat漏洞、MS系列漏洞、端口转发漏洞、以及域渗透等多种组合漏洞,希望大家多多利用。 环境搭建 机器密码 WEB主机 ubuntu:ubuntuWIN7主机 douser:Dotest123(DC)WIN2008主机 administrator:Test2008网络配置111网段是web的网…

Markdown随笔

冰冻三尺非一日之寒,持之以恒方位始终。 Markdown语法讲解标题一共六级标题分别为Ctrl+1~6: 一级 二级 三级 四级 五级 六级字体 粗体 粗斜体 斜体 删除线引用一个大于号>分割线图片超链接 点击进入百度百科列表 数字加上空格(有序) 点加上空格(无序)表格姓名 性别 年…

tarjan里的定义

强连通分量 - OI Wiki (oi-wiki.org)从以u为根的子树中的任意点出发。单次到达(从这个点指向某个点,有一条边) 的这些点中的dfn的最小值以v为根的子树,包含在以u为根的子树中,low[v]所用的子节点,一定也可以被low[u],这个点一定在以u为根的子树里,所以用low[v] 从u这个…

南沙csp-j/s一对一家教陈老师解题:1317:【例5.2】组合的输出

​【题目描述】排列与组合是常用的数学方法,其中组合就是从n个元素中抽出r个元素(不分顺序且r≤n),我们可以简单地将n个元素理解为自然数1,2,…,n,从中任取r个数。 现要求你用递归的方法输出所有组合。 例如n=5,r=3,所有组合为: 1 2 3 1 2 4 1 2 5 1 3 4 1 …

First day01

Markdown学习 二级标题 字体 Hello World Hello World Hello World Hello World Hello World 引用选择java走上人生巅峰分割线图片 ![截图](C:\Users\邢其俊\Pictures\Screenshots\屏幕截图 2024-09-13 180016.png)超链接 [点击跳转到狂神博客](仓库 - 狂神说 (kuangstudy) - G…