ccpc2023秦皇岛F. Mystery of Prime(dp)

题目要求改变数组中的数字使相邻数字之和是质数,同时改变数字的次数最少

因为改变的数字可以无穷大

我假设当一个数改变为一个某一个偶数时,他周围的任意的奇数肯定能和他相加变成质数

当一个数变为某一个大于1的奇数时,他周围任意偶数肯定能和他相加变成质数

当一个数变为1时,他周围的1一定是符合条件的,同时如果有修改成偶数的也一定符合条件

我们就可以开4维的dp

0修改成大于1的奇数,1修改成偶数,2修改成1, 3不修改

#include <bits/stdc++.h>
#define int long long
using namespace std;
const int N = 2e5 + 50;
int dp[N][4];//0修奇数, 1修偶数, 2修1,3不修
int a[N]; int v[N], prime[N];
int m;
void is_prime()
{for (int i = 2; i < N; i++){if (v[i] == 0) { v[i] = i; prime[++m] = i; }for (int j = 1; j <= m; j++) { if (prime[j] > v[i] || prime[j] > N / i) break; v[i * prime[j]] = prime[j]; }}
}
bool check(int x) { if (v[x] == x) return true; return false; }
signed main() {ios_base::sync_with_stdio(0); cin.tie(0), cout.tie(0); is_prime();int n; cin >> n; for (int i = 1; i <= n; i++) {cin >> a[i];}dp[1][0] = 1, dp[1][1] = 1; dp[1][2] = 1, dp[1][3] = 0; if (a[1] == 1) { dp[1][2] = 0; }for (int i = 2; i <= n; i++) {//0修奇数, 1修偶数, 2修1,3不修if (a[i] == 1) {//1 -> 偶数和1dp[i][3] = min(dp[i - 1][2], dp[i - 1][1]);}else if (a[i] & 1) {//奇数 -> 偶数dp[i][3] = dp[i - 1][1];}else {//偶数 -> 奇数和1dp[i][3] = dp[i - 1][0];if (check(a[i] + 1)) {dp[i][3] = min(dp[i][3], dp[i - 1][2]);}}if (check(a[i] + a[i - 1])) {// ->不修改dp[i][3] = min(dp[i][3], dp[i - 1][3]);}if (a[i] == 1) {dp[i][2] = dp[i][3];}else {//0修奇数, 1修偶数, 2修1,3不修dp[i][2] = min(dp[i - 1][2] + 1, dp[i - 1][1] + 1);//修改为1->1和偶数if (check(1 + a[i - 1])) {//->不修改dp[i][2] = min(dp[i][2], dp[i - 1][3] + 1);}}dp[i][0] = dp[i - 1][1] + 1;//奇数 -> 偶数if (a[i - 1] % 2 == 0) {dp[i][0] = min(dp[i][0], dp[i - 1][3] + 1);}dp[i][1] = min(dp[i - 1][0] + 1, dp[i - 1][2] + 1);//偶数 -> 1和奇数if (a[i - 1] % 2 == 1) {dp[i][1] = min(dp[i][1], dp[i - 1][3] + 1);}}cout << min({ dp[n][0],dp[n][1],dp[n][2],dp[n][3] });
}

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

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

相关文章

港联证券:资金融通构成强支撑 “一带一路”金融合作开新局

本年是共建“一带一路”主张提出十周年。经过十年打开&#xff0c;共建“一带一路”从夯基垒台、立柱架梁到落地生根、持久打开&#xff0c;已成为打开包容、互利互惠、协作共赢的国际协作途径。“资金融通”作为首份“一带一路”白皮书提出的“五通”之一&#xff0c;定位为“…

DPDK收发包流程分析

一、 前言 DPDK是intel工程师开发的一款用来快速处理数据包的框架,最初的目的是为了证明传统网络数据包处理性能低不是intel处理器导致的,而是传统数据的处理流程导致,后来随着dpdk的开源及其生态的快速发展,dpdk成为了高性能网络数据处理的优秀框架。本篇文章主要介绍DPDK…

Django实现音乐网站 ⒇

使用Python Django框架做一个音乐网站&#xff0c; 本篇音乐播放器-添加播放音乐功能实现。 目录 创建播放器数据表 设置表结构 执行创建表 命令 执行 数据表结构 添加单个歌曲 创建路由 加入播放器视图 模板处理 基类方法 子页面调用 优化弹窗 加入layui文件 基…

在URP管线中添加ShaderMaterial自定义GUI的方法

编写GUI面板 1. 新建GUI子面板 using UnityEngine; using UnityEngine.Rendering;namespace UnityEditor.Rendering.Universal.ShaderGUI {internal class CP_XXXOutLineGUI{public static class Styles{}public struct LitProperties{public LitProperties(MaterialProperty…

vxe-table添加排序

在 <vxe-column> 中添加sortable属性 <vxe-columnfield"longitude"sortabletitle"经度"></vxe-column><vxe-columnfield"latitude"sortabletitle"纬度"></vxe-column><vxe-columnfield"dateEst…

Cross decomposition交叉分解大比拼:性能、应用场景和可视化对比总结

交叉分解(Cross Decomposition)在机器学习中是一种用于分析两组变量之间关系的技术。它能够找出两组数据之间的线性关系,并将这些关系用于预测或分类。在本文中将探讨四种不同的交叉分解方法:CCA(典型相关分析)、PLSCanonical、PLSRegression和PLSSVD,并从五个方面进行详…

Spring Boot如何优雅实现动态灵活可配置的高性能数据脱敏功能

1.背景 在当下互联网高速发展的时代下&#xff0c;涉及到用户的隐私数据安全越发重要&#xff0c;一旦泄露将造成不可估量的后果。所以现在的业务系统开发中都会对用户隐私数据加密之后存储落库&#xff0c;同时还要求后端返回数据给前台之前进行数据脱敏。所谓脱敏处理其实就…

正则表达式的神奇世界:表达、匹配和提取

正则表达式的神奇世界&#xff1a;表达、匹配和提取 前言第一&#xff1a; 什么是正则表达式&#xff1f;第二&#xff1a; 字符匹配和量词&#xff1a;1. 字符匹配&#xff1a;2. 量词&#xff1a;3. 贪婪和非贪婪匹配&#xff1a; 第三&#xff1a;字符类和元字符1. 字符类&a…

TikTok Shop美国本土店VS跨境店,如何选择?有何区别?

TikTok不仅仅是一个用于分享有趣短视频的平台&#xff0c;它也逐渐成为了商家们极力推广自己品牌和产品的场所。 在TikTok的商业生态系统中&#xff0c;存在几种不同的商店类型&#xff0c;各有其独特性和适用场景。今天&#xff0c;我们就来深入探讨这些店的差异与特点。 一、…

判断两线段是否相交

我们做两次 每次把一条线段视为直线&#xff0c;判断另一条线段的两个点是否在直线的两侧 如果两次都符合&#xff0c;说明直线相交 struct Point {double x, y; Point operator - (const Point &A) const {Point B; B.xx-A.x; B.yy-A.y; return B; }double operator ^ …

Si24R2|2.4G单发射芯片 +7dBm可调功率 校讯通

Si24R2是一种通用、低功耗、高性能的2.4GHz无线射频发射芯片&#xff0c;主要用于单向通信系统&#xff0c;以降低系统成B&#xff0c;在运行中与si24r1兼容。 Si24r2具有低功耗和低成B。 它主要用于单向低功率传输系统&#xff0c;如无线控制系统、无线数据采集系统等。 Si2…

Android之自定义相册文件选择器

一、自定义FilePicker类 package com.custom.jfrb.util; //自己的包名位置import android.app.Activity; import androidx.fragment.app.Fragment;import com.luck.picture.lib.PictureSelector; import com.luck.picture.lib.config.PictureConfig; import com.luck.picture.…

在mysql8查询中使用ORDER BY结合LIMIT时,分页查询时出现后一页的数据重复前一页的部分数据。

这里写目录标题 问题描述&#xff1a;问题模拟&#xff1a;原因分析问题解释问题解决验证官方文档支持 问题描述&#xff1a; 在mysql8查询中使用ORDER BY结合LIMIT时&#xff0c;分页查询时出现后一页的数据重复前一页的部分数据。 问题模拟&#xff1a; 表table_lock_test&…

pytorch里面的 nn.Parameter 和 tensor有哪些异同点

简单来说&#xff0c;你可以把tensor看作是一个通用的数据结构&#xff0c;而nn.Parameter看作是一种特殊的tensor&#xff0c;这种tensor可以被优化以提高模型的性能。在创建模型参数时&#xff0c;你应该使用nn.Parameter而不是直接使用tensor&#xff0c;因为这样可以确保模…

Milvus 介绍

Milvus 介绍 Milvus 矢量数据库是什么&#xff1f;关键概念非结构化数据嵌入向量向量相似度搜索 为什么是 Milvus?支持哪些索引和指标&#xff1f;索引类型相似度指标(Similarity metrics) 应用示例Milvus 是如何设计的&#xff1f;开发者工具API访问Milvus 生态系统工具 本页…

《数据结构、算法与应用C++语言描述》使用C++语言实现数组双端队列

《数据结构、算法与应用C语言描述》使用C语言实现数组双端队列 定义 队列的定义 队列&#xff08;queue&#xff09;是一个线性表&#xff0c;其插入和删除操作分别在表的不同端进行。插入元素的那一端称为队尾&#xff08;back或rear&#xff09;&#xff0c;删除元素的那一…

【vue】el-carousel实现视频自动播放与自动切换到下一个视频功能:

文章目录 一、原因:二、实现代码:三、遇到的问题&#xff1a;【1】问题&#xff1a;el-carousel页面的视频不更新【2】问题&#xff1a;多按几次左按钮&#xff0c;其中跳过没有播放的视频没有销毁&#xff0c;造成再次自动播放时会跳页 一、原因: 由于后端无法实现将多条视频拼…

手机爬虫用Scrapy详细教程:构建高效的网络爬虫

如果你正在进行手机爬虫的工作&#xff0c;并且希望通过一个高效而灵活的框架来进行数据抓取&#xff0c;那么Scrapy将会是你的理想选择。Scrapy是一个强大的Python框架&#xff0c;专门用于构建网络爬虫。今天&#xff0c;我将与大家分享一份关于使用Scrapy进行手机爬虫的详细…

照片后期编辑工具Lightroom Classic 2024 mac中文新增功能

Lightroom Classic 2024&#xff08;lrC2024&#xff09;是专为摄影爱好者和专业摄影师设计的软件&#xff0c;它提供了全面的照片编辑工具&#xff0c;可以精准调整照片的色彩、对比度和曝光等参数&#xff0c;以便定制后期处理效果。 在lrC2024中&#xff0c;用户体验得到了提…

文件的逻辑结构(顺序文件,索引文件)

所谓的“逻辑结构”&#xff0c;就是指在用户看来&#xff0c;文件内部的数据应该是如何组织起来的。 而“物理结构”指的是在操作系统看来&#xff0c;文件的数据是如何存放在外存中的。 1.无结构文件 无结构文件:文件内部的数据就是一系列二进制流或字符流组成。无明显的逻…