备战蓝桥杯---动态规划(应用2(一些十分巧妙的优化dp的手段))

好久不见,甚是想念,最近一直在看过河这道题(感觉最近脑子有点宕机QAQ),现在算是有点懂了,打算记录下这道又爱又恨的题。(如有错误欢迎大佬帮忙指出)

话不多说,直接看题:

类比分组背包,我们可以令f[i][j]表示前i个数能否组成j.

转移方程为:f[i][j]=f[i-1][j-x1^2]||f[i-1][j-x2^2]||....||f[i-1][j-xi^2]

现在我们考虑优化一下:

因为f[i][j]为bool类型,我们可以尝试用bitset优化一下。

我们每一行用bitset,然后用位运算实现(比正常平移优化约32倍)

f[i]=f[i-1]||f[i-1]<<(x[i]^2);(注意bitset最低位在最右边)

下面为AC代码:

#include<bits/stdc++.h>
using namespace std;
int n;
bitset<1000100> f[110];
int main(){cin>>n;f[0][0]=1;for(int i=1;i<=n;i++){int l,r;scanf("%d%d",&l,&r);for(int k=l;k<=r;k++){f[i]|=f[i-1]<<(k*k);}}cout<<f[n].count();
}

接题:

类似爬楼梯,我们记f[i]为到i时最少踩的个数。如果,f[i]上有石子,那么f[i]=min(f[i-j])+1(j>=s&&j<=t).然后一看范围,空间与时间都不允许。

我们应该还记得上次背包用map存的情况,这是因为空间上有大量的冗余。

而在这一题上,我们发现相比于桥,石子特别小,也说明他们间的距离非常大.

于是我们进行状态压缩。

从这开始就困了我蛮久(还是自己太菜了QAQ)

首先按照上述过程我们顺利过了30,我们不妨先用自己测试输出一下具体的样子。

我们发现如果两个石子距离十分大,从某一个位置开始,dp的值都一样。

比赛时,直接压缩成一个不超范围的直接提交(如果是我的话,就直接赋一个2024)

当然,虽然规律很明显,但对于有”强迫症“的我来说还是有点难以接受,于是我们从感性与严格证明的角度来论证正确性。

我们不妨自己先画个数轴,我们以6/7举例。

很显然,越到后面,每一段逐渐重合,然后就连续了,因为没有石子,假设某一段的dp值不同(假设有3个不同的值),那么到了后面,对于每一个点,他的状态势必是在<=3个的不同的值里选min的,而3个不同的值中势必有最小的一个,越到后面,除了最小的其他2个一定会在过程中慢慢被舍弃,最终收敛于最小的值(当然,可能有无法到达的)。

总结一下,当两个石子离得比较远,那在中间的这一段,其实就是在经过上一个石子的更新后去不断地筛选出min然后就不变了,而我们要做的就是把不变的一段删掉)

可能有点抽象,那么我们来严格证一下:

首先,我们得知道一个结论:

在离一点oS(S−1)的位置其每一点都可以到(等会证)

然后请看分析:

因此,我们推出一个结论:

在离一点oS(S−1)的位置其每一点都可以到并且他们的dp值都一样。

接下来,我们就得到了压缩方法:

如果两个石子距离>s(s-1),那么就把他变成s(s-1),这样就可以顺利通过了(注意,虽然这样石子后面的几个位置可能不准确,但是不妨碍求min的正确性,保险一点,可以再多空格,这样子每一个点的dp都是对的了)。

下面是对那个数学结论的证明:

我看网上很多是用Bezout's identity来证,我在这采用比较直观的方法(这里证s^2,比较粗略):

下面给出AC代码(注意s==t的情况):

#include<bits/stdc++.h>
using namespace std;
int l,s,t,m,ck[110],dp[100000],ze[110];
map<int,int> mp;
bool cmp(int a,int b){return a<b;
}
int main(){cin>>l>>s>>t>>m;memset(dp,0x3f,sizeof(dp));for(int i=1;i<=m;i++) scanf("%d",&ck[i]);if(s==t){int cnt=0;for(int i=1;i<=m;i++){if(ck[i]%s==0) cnt++;}cout<<cnt;return 0;}sort(ck+1,ck+m+1,cmp);int mm=s*s+10;ze[0]=0;for(int i=1;i<=m;i++){ze[i]=min(mm,ck[i]-ck[i-1])+ze[i-1];mp[ze[i]]=1;}ze[m+1]=min(mm,l-ck[m])+ze[m];dp[0]=0;for(int i=1;i<=ze[m+1]+t-1;i++){for(int j=s;j<=t;j++){if(i-j>=0){if(mp.count(i)==1) dp[i]=min(dp[i],1+dp[i-j]);else dp[i]=min(dp[i],dp[i-j]);}}}int ans=1000;for(int i=ze[m+1];i<=ze[m+1]+t-1;i++) ans=min(ans,dp[i]);cout<<ans;
}

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

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

相关文章

2024年【T电梯修理】最新解析及T电梯修理操作证考试

题库来源&#xff1a;安全生产模拟考试一点通公众号小程序 T电梯修理最新解析根据新T电梯修理考试大纲要求&#xff0c;安全生产模拟考试一点通将T电梯修理模拟考试试题进行汇编&#xff0c;组成一套T电梯修理全真模拟考试试题&#xff0c;学员可通过T电梯修理操作证考试全真模…

maven配置多仓库私服

经常见我们除了需要官方的仓库以外&#xff0c;更多是配置了国内的阿里云公共仓库。但很多的企业会有自己的公共组件&#xff0c;两者会结合起来使用&#xff0c;就需要配置公司的私服。 而经常性的&#xff0c;我们会在 apache-maven-3.8.6\conf\settings.xml 中&#xff0c;…

Django学习笔记-HTML实现服务器图片的下载

1.index编写代码,跳转下载页面 2.创建download界面 3.编写download路由 4.创建download函数 1).如果请求的方法是GET&#xff0c;imglist变量存储从models.imgModel模型中获取的所有对象,创建字典ctx,使用render函数来渲染download.htm 2).如果请求的方法是POST,获取要下载的文…

啤酒:精酿啤酒与沙拉的轻盈享受

在繁忙的生活中&#xff0c;我们总是在寻找一种简单而健康的美食享受。当Fendi Club啤酒与沙拉相遇&#xff0c;它们将为我们带来一场轻盈的味觉之旅。 Fendi Club啤酒&#xff0c;以其醇厚的口感和淡淡的麦芽香气而闻名。这款啤酒在酿造过程中采用了特别的工艺&#xff0c;使得…

【Python】2019年蓝桥杯省赛真题——完全二叉树的权值

蓝桥杯 2019 省 A&B&#xff1a;完全二叉树的权值 题目描述 给定一棵包含 N N N 个节点的完全二叉树&#xff0c;树上每个节点都有一个权值&#xff0c;按从上到下、从左到右的顺序依次是 A 1 , A 2 , ⋯ A N A_1,A_2, \cdots A_N A1​,A2​,⋯AN​&#xff0c;如下图所…

Python接口自动化框架设计到开发,赶紧用起来!

1.如何设计一个接口自动化测试框架 根据接口地址、接口类型、请求数据、预期结果来进行设计&#xff0c;对于需要登录后才能进行操作的接口那么则需要进行header cookie等数据的传递&#xff0c;自动化测试的难点就是数据依赖。 2.python操作excel获得内容 首先python操作exce…

Java 学习和实践笔记(16):类的理解以及初始值

类&#xff0c;英文名叫class。基本上对应的就是语言里的名词。 比如&#xff0c;房子、人、树、花、汽车等等&#xff0c;这些名词&#xff0c;这些可以定义成类。 以房子为例&#xff0c;作为一个房子&#xff0c;它一定有相应的属性&#xff0c;比如房顶、墙、门、窗等等&…

windows下采用 nginx配置websocket支持wss流程

第一步、安装OpenSSL &#xff08;1&#xff09;下载OpenSSL软件包 地址&#xff1a;https://slproweb.com/products/Win32OpenSSL.html OpenSSL版本说明&#xff1a; Win64 OpenSSL v1.1.1wLight&#xff0c;安装Win64 OpenSSL v1.1.1w最常用的软件包 Win64 OpenSSL v1.1…

动态头部:统一目标检测头部与注意力

论文地址:https://arxiv.org/pdf/2106.08322.pdf ai阅读论文_论文速读_论文阅读软件-网易有道速读 创新点是什么? 这篇文档的创新点是提出了一种统一的方法&#xff0c;将对象检测头和注意力机制结合起来。作者在文中提出了一种称为Dynamic Head的方法&#xff0c;通过引入…

JS前端高频面试

JS数据类型有哪些&#xff0c;区别是什么 js数据类型分为原始数据类型和引用数据类型。 原始数据类型包括&#xff1a;number&#xff0c;string&#xff0c;boolean&#xff0c;null&#xff0c;undefined&#xff0c;和es6新增的两种类型&#xff1a;bigint 和 symbol。&am…

STM32—启用按键

​ 目录 1 、电路构成及原理图 2、编写实现代码 main.c main.h key.c 3、代码讲解 4、 烧录到开发板调试、验证代码 5、检验效果 本人使用的是朗峰 STM32F103 系列开发板&#xff0c;此笔记基于这款开发板记录。 1 、电路构成及原理图 重要&#xff01;一定先用短路…

LabVIEW轨道交通列车牵引制动试验平台

LabVIEW轨道交通列车牵引制动试验平台 概述 面对城市轨道交通领域对于高效、准确牵引制动系统的迫切需求&#xff0c;开发了一套基于LabVIEW软件与硬件相结合的试验平台。该平台模拟列车的牵引、制动等工况&#xff0c;通过高精度的数据采集与实时图形化展示&#xff0c;提升…

工具:clang-format使用

Visual Studio 在扩展-》管理扩展-》联机-》搜索Format on Save (for VS2022)插件&#xff0c;并安装 安装需要关闭VS&#xff0c;安装后重新打开vs。 这样每次保存源文件时就会自动调用vs默认的clang-format.exe对源码进行缩进&#xff0c;空格等进行格式化 如果想使用自定…

CSS列表学习2

之前学习了列表&#xff1b;继续熟悉&#xff1b; <!DOCTYPE html> <html> <head> <meta http-equiv"Content-Type" content"text/html; charsetutf-8"/><title></title><meta charset"utf-8" /><…

leetcode hot100单词拆分

在本题中&#xff0c;我们是要把一个字符串&#xff0c;判断是否能用给的字符串数组中的单词进行拆分&#xff0c;如果可以则返回true&#xff0c;不能的话则返回false。这个题一开始看无法与背包问题联系在一起。但仔细考虑&#xff0c;就是用物品&#xff08;给的字符串数组中…

数据分析(二)自动生成分析报告

1. 报告生成思路概述 怎么快速一份简单的数据分析报告&#xff0c;注意这个报告的特点&#xff1a; --网页版&#xff0c;可以支持在线观看或者分享HTML文件 --标题&#xff0c;动图&#xff0c;原始数据应有尽有 --支持交互&#xff0c;比如plotly交互画面&#xff0c;数据…

索引聚簇因子clustering_factor太大导致不走索引

查询条件超过一个月就不走索引&#xff1a; 检查表的block数和数据行数&#xff1a; select blocks,num_rows from dba_tables where table_name‘MS_MZXX’;blocks:618687 num_rows:20335462 查看聚簇因子clustering_factor的数&#xff1a;select clustering_factor from d…

力扣OJ题——随机链表的复制

题目&#xff1a; 138. 随机链表的复制 给你一个长度为 n 的链表&#xff0c;每个节点包含一个额外增加的随机指针 random &#xff0c;该指针可以指向链表中的任何节点或空节点。 要求&#xff1a;构造这个链表的 深拷贝 深拷贝应该正好由 n 个 全新 节点组成&#xff0c;其中…

Vulhub 练习 DC-4靶机完整复现

1.工具 kali:攻击机 IP地址&#xff1a;192.168.200.4 DC-4&#xff1a;靶机 IP地址&#xff1a;暂时未知 2.注意 这里搭建环境两台机器应该选用同类的网络连接方式&#xff1a;这里两台的连接方式为模式 二、信息收集 1.主机发现 找寻同网段下存活的主机&#xff08;可…

ChatGPT调教指南 | 咒语指南 | Prompts提示词教程(二)

在我们开始探索人工智能的世界时&#xff0c;了解如何与之有效沉浸交流是至关重要的。想象一下&#xff0c;你手中有一把钥匙&#xff0c;可以解锁与OpenAI的GPT模型沟通的无限可能。这把钥匙就是——正确的提示词&#xff08;prompts&#xff09;。无论你是AI领域的新手&#…