线性dp P4310-绝世好题/P4933 大师【日记】

1.绝世好题(P4310)

绝世好题icon-default.png?t=N7T8https://www.luogu.com.cn/problem/P4310

比较考验思维的一道题目,码量和理解难度都不大,重在思维。

一开始看错题,以为是求子串(还在想为啥考的纯位运算+枚举,where is dp

后面发现是求子序列,犯难,只能想到n方的方法

于是乎只好打开题解,这不是传统dp!

代码如下(这是我开始的写法,洛谷能AC,但是用一组 1 1 2 2 数据我感觉就能hack掉,在这组代码里,我并没有更新k,导致后面会出错)

//时间复杂度:O(An) A=31
#include<iostream>
using namespace std;
int f[35];//奇怪的选择了这样一种dp方式,存在前后的比较,但不是f[N] (N=1e5+10)int main(){int n;cin>>n;int b;int k=0;for(int i=1;i<=n;++i){cin>>b;for(int j=0;j<=30;++j){//注意不能用31 不然会爆intif(((1<<j)&b)) k=max(f[j]+1,k);}for(int j=0;j<=30;++j){if(((1<<j)&b)) f[j]=max(k,f[j]);//这里要判断是否符合的原因是 如果}}cout<<k<<endl;//题解是在每一步比较了ans,我想了想把这一步也优化掉了,因为k每次都是会被更新到最大return 0;
}

下面是正解,在每一次遍历都重置了k,避免了k对后方的影响,同时,可以模拟得知,在前面的状态如能能与后面串联,将会通过k=max(f[j]+1,k)的形式,将这个最大值传下来,共同使用这个最大值

#include<iostream>
using namespace std;
int f[32];int main(){int n;cin>>n;int b,k,ans=0;for(int i=1;i<=n;i++){scanf("%d",&b);k=1;for(int j=0;j<=30;j++)if((1<<j)&b) k=max(f[j]+1,k);for(int j=0;j<=30;j++)if((1<<j)&b) f[j]=max(f[j],k);ans=max(ans,k);}printf("%d\n",ans);return 0;
}

2.P4933 大师

传送门icon-default.png?t=N7T8https://www.luogu.com.cn/problem/P4933这道题我想了好一会儿,想到用创建一个f[1000][40000]大小的数组用来存每一个位置的差,这样一来,用一个n方复杂度的算法就可以全部遍历一遍。这种想法在我看到数据后戛然而止,于是直到最后我都没有再出现其他的思路。但是没有想到,f[1000][40000]占用内存并不多。

写题的时候学习了一下空间大小的计算方式

(图示样例来自csdn的某个博客保存的,有一定时间了想不太起来)

但大致就是这个计算方式,这里512MB的容量明显是绰绰有余的

代码如下:

#include<iostream>
#include<vector>
using namespace std;
int f[1005][40000+10];
const int k=1e4;
const int p=998244353;int main(){ios::sync_with_stdio(0),cin.tie(0),cout.tie(0);int n;cin>>n;vector<int> a(n+1);for(int i=1;i<=n;++i) cin>>a[i];int ans=0;for(int i=1;i<=n;++i){ans+=1;for(int j=1;j<=i-1;++j){f[i][a[i]-a[j]+k]+=f[j][a[i]-a[j]+k]+1;
//先理解下面的,这里就好理解了,就是连续相同数字,给后面的是不相同的,因为种类只跟下标有关f[i][a[i]-a[j]+k]%=p;ans+=f[j][a[i]-a[j]+k]+1;
//这一行单独拿出来加的含义就是不受相同数字的影响,因为f[i][a[i]-a[j]+k]时刻变化。
//举个例子
//1 1 2是前提,现在加上一个3则,可以得到 1 2 3   1 2 3   2 3。f[i][a[i]-a[j]+k]就是以2为结束点,的12  补充上的1其实就是前面不存在的单独拉出来一个2(因为单独2在for的第一行久单独讨论了)ans%=p;}}cout<<ans<<endl;return 0;
}

这里用一个比较典型的例子来助于理解

例子:0 1 1 2 3

只对每一个位置的公差1做讨论,可以发现是 0 1 1 4 5(解释在代码里)

多模拟模拟,该题还是有思维难度的

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

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

相关文章

vue iis 配置

下载安装两个IIS模块 1). 传送门&#xff1a;URL Rewrite 2). 传送门&#xff1a;Application Request Routing 注 : 只有在 服务器的主页 有Application Request Routing 部署VUE网站 生成网站 在VUE项目打包生成出发布文件,即文件夹 dist,此处忽略 复制到你需要存放网站的…

Skywalking官方的实战模拟项目Live-Demo

Skywalking 官方的实战模拟项目Live-Demo Live-Demo 是 Skywalking 官方的实战模拟项目&#xff0c;其中包含4个子模块项目 projectA访问projectB、projectC两个SpringBoot项目 projectB访问本地的H2数据库 projectC访问www.baidu.com并同时向一台Kafka消息队列写入数据 proje…

入门指南:使用uni-app构建跨平台应用

入门指南&#xff1a;使用uni-app构建跨平台应用 &#x1f31f; 前言 欢迎来到我的小天地&#xff0c;这里是我记录技术点滴、分享学习心得的地方。&#x1f4da; &#x1f6e0;️ 技能清单 编程语言&#xff1a;Java、C、C、Python、Go前端技术&#xff1a;Jquery、Vue.js、R…

六、软考-系统架构设计师笔记-软件工程基础知识

1、软件工程 软件工程是将系统化的、严格约束的、可量化的方法应用于软件的开发、运行和维护&#xff0c;即将工程化应用于软件并对上述方法的研究。 软件要经历从需求分析、软件设计、软件开发、运行维护&#xff0c;直至被淘汰这样的全过程&#xff0c;这个过程称为软件的生…

Android使用OpenGL和FreeType绘制文字

Open GL主要是渲染图形的&#xff0c;有时候需要绘制文字&#xff0c;网上搜了一下&#xff0c;基本思路都是把文字转成位图&#xff0c;再使用Open GL纹理进行渲染。加载纹理在特定阶段才能成功&#xff08;在onSurfaceCreated中加载&#xff09;&#xff0c;这样就无法动态的…

部署LVS负载均衡架构

目录 一、ipvsadm 工具 二、NAT模式下部署LVS负载均衡 1、部署NFS共享存储服务器 1.1 安装NFS软件 1.2 新建共享目录和站点文件 1.3 设置共享策略 2、部署节点服务器1 2.1 安装并启动nginx软件 2.2 挂载共享目录到网页站点目录 2.3 修改网关 3、部署节点服务器2 3.…

在ABAP中创建一个简单的守护进程

原文地址&#xff1a;Create a simple Daemon in ABAP 目录 一、ABAP语言中的守护进程是什么&#xff1f;二、ABAP 守护进程框架 (ADF)三、ABAP 守护进程类四、创建一个简单的ABAP守护进程步骤1&#xff1a;创建一个新的ABAP Daemon类步骤2&#xff1a;实现ON_ACCEPT方法第三步…

「滚雪球学Java」:GUI编程(章节汇总)

咦咦咦&#xff0c;各位小可爱&#xff0c;我是你们的好伙伴——bug菌&#xff0c;今天又来给大家普及Java SE相关知识点了&#xff0c;别躲起来啊&#xff0c;听我讲干货还不快点赞&#xff0c;赞多了我就有动力讲得更嗨啦&#xff01;所以呀&#xff0c;养成先点赞后阅读的好…

Kosmos-1: 通用接口架构下的多模态大语言模型

Kosmos-1: 通用接口架构下的多模态大语言模型 FesianXu 20230513 at Baidu Search Team 前言 在大规模语言模型&#xff08;Large Language Model, LLM&#xff09;看似要带来新一番人工智能变革浪潮之际&#xff0c;越来越多尝试以LLM作为通用接口去融入各种任务的工作&#…

【vue】ant-design弹出框无法关闭和runtimecore提示isFucntion is not function的问题修复

【vue】ant-design弹出框无法关闭和runtimecore提示isFucntion is not function的问题修复&#xff0c;初步分析是vue发布3.4版本以后引起的兼容性问题。 问题截图&#xff1a; 1.isFucntion is not function&#xff0c;是由于vue升级后众多插件版本不匹配造成的问题 2.弹框…

计算机中msvcp140.dll,丢失怎么修复与解决

一、msvcp140.dll20个软件环境 msvcp140.dll文件是许多软件运行环境的组成部分&#xff0c;通常与Microsoft Visual C Redistributable关联。以下是可能使用该文件的软件环境&#xff1a; 微软办公软件&#xff1a;如Microsoft Office套件&#xff0c;包括Word、Excel、Power…

Python给图片加水印

受到“手动给证件加文字太麻烦”的感触&#xff0c;想用Python来实现给图片加水印&#xff0c;这不方便多了。 这里使用PIL模块&#xff1a; from PIL import Image from PIL import ImageFont from PIL import ImageDrawimg_t Image.open(cat.jpg) img_size_t img_t.size…

OJ:循环队列

622. 设计循环队列 - 力扣&#xff08;LeetCode&#xff09; 思路 思路&#xff1a;首先循环队列的意思是&#xff1a;空间固定&#xff0c;就是提前开辟好&#xff0c;满了就不能插入了&#xff0c;但是删除数据后仍有空间&#xff0c;删除循环队列里面的数据后&#xff0c;保…

Apache ECharts数据可视化技术

介绍 官方地址:Apache ECharts 快速入门案例echarts.init //初始化方法 <!DOCTYPE html> <html><head><meta charset"utf-8" /><title>ECharts</title><!-- 引入刚刚下载的 ECharts 文件 --><script src"echart…

基于JavaWEB SpringBoot婚纱影楼摄影预约网站设计和实现

基于JavaWEB SSM SpringBoot婚纱影楼摄影预约网站设计和实现 博主介绍&#xff1a;多年java开发经验&#xff0c;专注Java开发、定制、远程、文档编写指导等,csdn特邀作者、专注于Java技术领域 作者主页 央顺技术团队 Java毕设项目精品实战案例《1000套》 欢迎点赞 收藏 ⭐留言…

Java Swing游戏开发学习8

内容来自RyiSnow视频讲解 上一节提到的bug&#xff0c;不知道有没有人发现&#xff1f; 在播放音乐和音效的时候使用的是同一个clip对象&#xff0c;播放背景音乐在前&#xff0c;后续播放音效&#xff0c;clip对象就被覆盖了&#xff0c;因此导致调用停止播放背景音乐的时候&a…

计算机组成原理之机器:总线

计算机组成原理之机器 笔记来源&#xff1a;哈尔滨工业大学计算机组成原理&#xff08;哈工大刘宏伟&#xff09; Chapter2&#xff1a;总线 2.1 总线的基本概念 1.为什么需要总线&#xff1f;有几百个部件需要连接进行信息传输 2.什么是总线&#xff1f;总线是连接各个部件…

七、链表问题(上)

160、相交链表&#xff08;简单&#xff09; 题目描述 给你两个单链表的头节点 headA 和 headB &#xff0c;请你找出并返回两个单链表相交的起始节点。如果两个链表不存在相交节点&#xff0c;返回 null 。 图示两个链表在节点 c1 开始相交&#xff1a; 题目数据 保证 整个…

如何选择阿里云服务器配置?(CPU/内存/带宽/磁盘)

阿里云服务器配置怎么选择&#xff1f;CPU内存、公网带宽和系统盘怎么选择&#xff1f;个人开发者或中小企业选择轻量应用服务器、ECS经济型e实例&#xff0c;企业用户选择ECS通用算力型u1云服务器、ECS计算型c7、通用型g7云服务器&#xff0c;阿里云服务器网aliyunfuwuqi.com整…

对象得定义与使用(动力节点老杜)

对象思想 1.什么是面向过程&#xff0c;什么是面向对象&#xff1f; 换而言之&#xff0c;面向对象思想实际就是将整体分成一个个独立的单元&#xff0c;每个单元都有自己得任务和属性&#xff0c;所有单元结合在一起完成一个整体。如果某个单元出现了问题还可以及时处理&…