2003NOIP普及组真题 3. 数字游戏

线上OJ 地址:

【03NOIP普及组】数字游戏

此题考察的是 区间DP + 前缀和

核心思想:

1、这道题主要考查了动态规划的思想。通过分析题目,可以发现需要 枚举环上所有划分为m组 的不同方案,来求得最大或最小值。属于 环上动态规划 问题,可以 破环成链,变成区间dp问题

备注:

环形 结构上的动态规划问题,是一种特殊的区间动态规划问题。由于存在 环形后效性,所以 不满足动态规划算法无后效性 约束条件。故常将环形结构上的动态规划问题,通过 “断环为链” 策略 转化为线性动态规划 问题求解。
断环为链 策略具体来说就是“ 把环断开为链,然后复制一倍接在末尾 ”,通过这种方式可以将环形结构上的动态规划问题转化为线性结构上的动态规划问题,然后使用线性动态规划的方法进行求解。本段引用。

在这里插入图片描述

2、在本题中,
2.1 设置状态 f[L][R][K] 表示从 L 到 R 这段长度为 R - L + 1 的连续序列划分为 K 组的 最小值;
2.2 设置状态 b[L][R][K] 表示从 L 到 R 这段长度为 R - L + 1 的连续序列划分为 k 组的 最大值;

在这里插入图片描述

因为 划分为 K 段的最小值 ,是从 划分为 K - 1 段的最小值 转移而来。即 f[K] = f[K-1] * 最后一段数值和

注解:
如上图所示,设左区间端点是L,右区间端点是R,在L和R之间找一点 J来区分最后一段。我们枚举 J的位置。
因为:
1、L -> J 为 K - 1 段,所以 J − L + 1 ≥ K − 1 J - L + 1 ≥ K - 1 JL+1K1,所以 J ≥ L + K − 2 J ≥ L + K -2 JL+K2
2、J+1 -> R为最后1段,所以 J + 1 ≤ R J+1 ≤ R J+1R,所以 J ≤ R − 1 J ≤ R - 1 JR1
所以 J 的范围是 J ∈ [ L + k − 2 , R − 1 ] J ∈ [L + k - 2,R - 1] J[L+k2R1]

所以动态转移方程为:

f [ L ] [ R ] [ K ] = m i n ( f [ L ] [ R ] [ K ] , f [ L ] [ J ] [ K − 1 ] ∗ ( a J + 1 + . . . + a R ) ) f [L][R][K] = min( f[L][R][K], f[L][J][K - 1] * (a_{J+1}+...+a_R) ) f[L][R][K]=min(f[L][R][K],f[L][J][K1](aJ+1+...+aR));
b [ L ] [ R ] [ K ] = m a x ( b [ L ] [ R ] [ K ] , b [ L ] [ J ] [ K − 1 ] ∗ ( a J + 1 + . . . + a R ) ) b [L][R][K] = max( b[L][R][K], b[L][J][K - 1] * (a_{J+1}+...+a_R) ) b[L][R][K]=max(b[L][R][K],b[L][J][K1](aJ+1+...+aR));

为了快速计算,我们记 s[n] 为前 n 项的 前缀和 数组,则上式中的 a J + 1 + . . . + a R = s [ R ] − s [ J ] a_{J+1}+...+a_R = s[R] - s[J] aJ+1+...+aR=s[R]s[J]

题解代码:
#include <bits/stdc++.h>
using namespace std;const int N = 110, M = 10;   // N = 2*n + 余量。n上限为50 
const int INF = 0x3f3f3f3f;  // 无穷大 
const int NINF = 0xafafafaf; // 无穷小 int n, m;
int a[N], s[N]; // a[]为数值;s[]为前缀和 
int f[N][N][M]; // f[L][R][K] 表示从 L 到 R 这段长度为 R - L + 1 的连续序列划分为 K 组的最小值 
int b[N][N][M]; // b[L][R][K] 表示从 L 到 R 这段长度为 R - L + 1 的连续序列划分为 k 组的最大值;
int max_ans = NINF;  
int min_ans = INF;    // 计算 num对 10的模。如果是负数,需转成整数 
int get_mod(int num)  
{return (num % 10 + 10) % 10; // 调整负数模为非负整数     
}int main()
{scanf("%d %d", &n, &m);for(int i = 1; i <= n; i ++){scanf("%d", &a[i]);a[i + n] = a[i];  // 把环断开为链,然后复制一倍接在末尾}for(int i = 1; i <= n * 2; i ++)  a[i] = get_mod(a[i]);  // 计算前先对10取模 // 求前缀和for(int i = 1; i <= n * 2; i ++)  s[i] = s[i - 1] + a[i];memset(f, 0x3f, sizeof(f));  // 将最小值初始化为无穷大 memset(b, 0xaf, sizeof(b));  // 将最大值初始化为无穷小 for(int len = 1; len <= n; len++) // 外围枚举所有用到的区间长度,从1开始 {for(int l = 1; l + len - 1 < n * 2; l++) // 在每一个区间长度下,枚举左端点的位置 {int r = l + len - 1; // 区间长度已知,左端点已知,则可计算右端点 f[l][r][1] = b[l][r][1] = get_mod(s[r] - s[l - 1]);  // 在只划分1个区间的情况下,f 和 b 就是区间内的元素和 if(len == n && 1 == m)   // 如果当前区间长度正好是n,且m就是1,则更新待求的最大值和最小值 {min_ans = min(min_ans, f[l][r][m]);max_ans = max(max_ans, b[l][r][m]);}// 枚举 Kfor(int k = 2; k <= m; k++){for(int j = l + k - 2; j <= r - 1; j++)  // j 为划分为 k 个区间的所有可能方案的最右侧划分点的范围:j ∈[L + K - 2, r - 1] {   // “划分为 K 段的最小值”,是从“划分为 K - 1 段的最小值”转移而来。f[l][r][k] = min(f[l][r][k], f[l][j][k - 1] * get_mod(s[r] - s[j]));                   b[l][r][k] = max(b[l][r][k], b[l][j][k - 1] * get_mod(s[r] - s[j]));if(len == n && k == m)  // 如果当前区间长度正好是n,且m就是k,则更新待求的最大值和最小值{min_ans = min(min_ans, f[l][r][m]);max_ans = max(max_ans, b[l][r][m]);						} }            	} }}printf("%d\n%d\n", min_ans, max_ans); return 0;
}

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

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

相关文章

2024.6.7学习记录

1、css面试题复习加整理 2、dp刷题 也是水

阅读笔记——《AFLNET: A Greybox Fuzzer for Network Protocols》

【参考文献】Pham V T, Bhme M, Roychoudhury A. Aflnet: a greybox fuzzer for network protocols[C]//2020 IEEE 13th International Conference on Software Testing, Validation and Verification (ICST). IEEE, 2020: 460-465.【注】本文仅为作者个人学习笔记&#xff0c;…

华媒舍:3步实际操作教大家快速升级活动策划实际效果

什么叫活动策划推广&#xff1f;活动策划推广指通过制定目标与执行一系列活动来推广宣传企业、产品和服务。这种活动可以包括线上与线下宣传营销、社会化营销、品牌合作等各种方式。正确活动策划推广能够帮助企业在竞争激烈的市场中突围&#xff0c;吸引住目标群体并提高销售总…

大语言模型的sft

https://zhuanlan.zhihu.com/p/692892489https://zhuanlan.zhihu.com/p/6928924891.常见的sft的开发流程 a.根据业务场景调整提示词;越详细越好,不要让模型理解歧义,拆分。 b.尝试闭源和开源,以评估LLM能够解决这类场景问题。 c.准备数据,包括多个子任务。 d.训练上线…

电脑提示缺失iUtils.dll文件怎么办,分享几种靠谱的解决方法

在现代科技发展迅猛的时代&#xff0c;电脑已经成为我们生活和工作中不可或缺的工具。然而&#xff0c;随着使用时间的增长&#xff0c;电脑也会出现一些问题&#xff0c;其中之一就是开机时弹出窗口提示找不到iUtils.dll文件。这个问题可能会给用户带来困扰和不便&#xff0c;…

Python的登录注册界面跳转汽车主页面

1.登录注册界面的代码&#xff1a; import tkinter as tk from tkinter import messagebox,ttk from tkinter import simpledialog from ui.car_ui import start_car_ui# 设置主题风格 style ttk.Style() style.theme_use("default") # 可以根据需要选择不同的主题…

切莫被人工智能的洪流吞噬

切莫被人工智能的洪流吞噬 当今社会似乎正在被“人工智能”的概念淹没&#xff0c;各行各业也都期望能与其挂钩&#xff0c;彷佛这就是新世代下的灵药&#xff0c;有人把这一现象称为“旧互联网时代的新革命”。但是我们&#xff0c;这一现象的缔造者&#xff0c;又处于这洪流…

计算机网络--计算机网络概念

计算机网络--计算机网络概念 计算机网络--物理层 计算机网络--数据链路层 计算机网络--网络层 计算机网络--传输层 计算机网络--应用层 0.计算机网络简介 0.2 计算机网络的功能简介 数据通信(连通性)资源共享&#xff1a; 软件硬件数据 分布式处理 多台计算机各自承担同…

项目-双人五子棋对战:匹配模块的实现(4)

完整代码见: 邹锦辉个人所有代码: 测试仓库 - Gitee.com 在上一篇中, 我们已经讲到了匹配模块中前后端的接口约定, 也讲到了前后端它们是怎么完成发送请求, 接收请求, 处理响应, 返回响应这个过程的. 在这一篇中, 我们将对匹配模块用到的一些组件, 进行讲解. 后端代码 匹配器…

【Linux取经路】网络套接字编程——初识篇

文章目录 一、端口号1.1 认识端口号1.2 端口号 VS 进程 PID 二、认识 TCP 协议三、认识 UDP四、网络字节序列五、socket 编程接口5.1 常用 API5.2 sockaddr 结构 六、结语 一、端口号 网络通信的本质是应用层软件进行数据的发送和接受&#xff0c;软件在启动之后&#xff0c;本…

网络安全快速入门(十五)(下)手动创建用户及su,sudo命令

15.8 序言 前面我们已经大概了解了创建用户一些相关文件&#xff0c;接下来我们来手动创建用户&#xff0c;话不多说&#xff0c;我们直接开搞&#xff01;&#xff01;&#xff01; 15.9 手动创建用户&#xff1a; 一般来讲&#xff0c;我们创建用户通过useradd和passwd命令来…

python数据分析-心脏衰竭分析与预测

研究背景 人的心脏有四个瓣膜&#xff0c;主动脉银、二尖、肺动脉和三尖源 不管是那一个膜发生了病变&#xff0c;都会导致心脏内的血流受到影响&#xff0c;这就是通常所说的心脏期膜病&#xff0c;很多是需要通过手术的方式进行改善的。随着人口老龄化的加剧,&#xff0c;心…

Java基础_异常

Java基础_异常 异常体系介绍编译时异常和运行时异常异常的作用异常的处理方式JVM默认的处理方式自己处理&#xff08;捕获异常&#xff09;try...catch灵魂四问Throwable的成员方法 抛出处理 综合练习自定义异常来源Gitee地址 异常体系介绍 异常是什么&#xff1f; 程序中可能出…

【Java】String类 -- 重要概念!!!

// 源码 public final class Stringimplements java.io.Serializable, Comparable<String>, CharSequence {/** The value is used for character storage. */private final char value[];/** Cache the hash code for the string */private int hash; // Default to 0 /…

RTOS笔记--信号量+互斥量+事件组

信号量的本质 信号量是一个特殊的队列&#xff0c;但并不涉及数据传输&#xff0c;因此不需要读写位置和发送者列表&#xff0c;但是多了一个最大计数值。 个人理解&#xff1a;信号量类似一个加入了保护机制的全局变量&#xff0c;不会因为中断切换的原因而导致数据出错。 信号…

Steam游戏如何选择适合的服务器

在Steam平台上&#xff0c;玩家可以享受到来自世界各地开发者的游戏作品。然而&#xff0c;要获得最佳的游戏体验&#xff0c;选择合适的服务器至关重要。本文将从网络延迟、服务器位置、游戏类型和个人偏好等多个方面&#xff0c;为玩家提供选择Steam游戏服务器的实用指南。 如…

k8s挂载配置文件(通过ConfigMap方式)

一、ConfigMap简介 K8s中的ConfigMap是一种用于存储配置数据的API对象&#xff0c;属于Kubernetes中的核心对象。它用于将应用程序的配置信息与容器镜像分离&#xff0c;以便在不重新构建镜像的情况下进行配置的修改和更新。ConfigMap可以存储键值对、文本文件或者以特定格式组…

PDF编辑与修正 提高工作效率 Enfocus PitStop Pro 2022 中文

Enfocus PitStop Pro 2022是一款专为Mac用户设计的强大PDF编辑和校对工具。它支持添加、删除、合并、分割PDF页面&#xff0c;以及文本和图像的编辑&#xff0c;如文字替换、字体更改、颜色调整等。内置自动修复功能&#xff0c;能快速检测并修复缺失字体、重叠文本等常见问题。…

【Text2SQL 论文】PET-SQL:用 Cross-Consistency 的 prompt 增强的两阶段 Text2SQL 框架

论文&#xff1a;PET-SQL: A Prompt-enhanced Two-stage Text-to-SQL Framework with Cross-consistency ⭐⭐⭐ arXiv:2403.09732&#xff0c;商汤 & 北大 Code&#xff1a;GitHub 一、论文速读 论文一开始提出了以往 prompt-based 的 Text2SQL 方法的一些缺点&#xff1…

使用缓存降低数据库并发读写方案探索

文章目录 前言缓存设计思想缓存划分缓存应用时机 客户端缓存浏览器缓存网关或代理服务器缓存CDNPCDN 服务端缓存本地缓存本地缓存实现Java堆缓存memcached/ecachecaffeineORM框架一级/二级缓存 分布式缓存分布式缓存优缺点分布式缓存实现分布式缓存实施过程可能遇到问题分布式缓…