备战蓝桥杯---动态规划(应用1)

话不多说,直接看题:

首先我们考虑暴力,用二维前缀和即可,复杂度为o(n^4).

其实,我们不妨枚举任意2行,枚举以这个为边界的最大矩阵。

我们把其中的每一列前缀和维护出来,相当于把一个矩阵压缩成了一个序列,然后问题就转化为了求一个序列的最大子段和。

下面为AC代码:

#include<bits/stdc++.h>
using namespace std;
int n,a[300][300],lie[300][300],b[300],hh[300];
int ck(){int ss=-0x3f3f3f3f;memset(hh,0,sizeof(hh));for(int i=1;i<=n;i++){hh[i]=max(b[i],b[i]+hh[i-1]);ss=max(ss,hh[i]);}return ss;
}
int main(){cin>>n;for(int i=1;i<=n;i++){for(int j=1;j<=n;j++){cin>>a[i][j];lie[i][j]=a[i][j]+lie[i-1][j];}}int ans=-0x3f3f3f3f;for(int i=1;i<=n;i++){for(int j=i+1;j<=n;j++){for(int k=1;k<=n;k++){b[k]=lie[j][k]-lie[i][k];}ans=max(ans,ck());}}cout<<ans;
}

扩展一下,假如是求立方体呢?

我们枚举两个x方向与y方向的线,然后在z轴上前缀和压缩即可,复杂度为o(n^5)

接题:

第一问就是求导弹的最长不上升子序列。

对于第二问当高度递增时,要打全部需要相应的个数,换句话说就是至少要导弹的最长上升子序列。

其实,这个数量刚刚可以,我们不妨用反证法,假如还需要一个,不妨假设它栏A与B(A<B)高度间的一个C,假如他比B高,那么我栏B的导弹栏C即可,假如比A高并比B低,矛盾,假如比A低则不需要。因此,数量刚刚可以。

下面是AC代码:

#include<bits/stdc++.h>
using namespace std;
int b,cnt,a[100010],dp1[100010],dp2[100010];
int main(){while(cin>>b){a[++cnt]=b;}for(int i=1;i<=cnt;i++){dp1[i]=1;for(int j=1;j<i;j++){if(a[j]>=a[i]){dp1[i]=max(dp1[i],1+dp1[j]);}}}int ans=1;for(int i=1;i<=cnt;i++){ans=max(ans,dp1[i]);}cout<<ans<<endl;for(int i=1;i<=cnt;i++){dp2[i]=1;for(int j=1;j<i;j++){if(a[j]<a[i]){dp2[i]=max(dp2[i],1+dp2[j]);}}}ans=1;for(int i=1;i<=cnt;i++){ans=max(ans,dp2[i]);}cout<<ans;
}

我们不妨设f[i][0]表示上升的最大长度(i必选),f[i][1]表示先上升在下降的最大长度(i必选)

于是我们得到转移方程f[i][0]=max(1+f[k][0]),f[i][1]=max(f[k][0]+1,f[k][1]+1)

下面是AC代码:

#include<bits/stdc++.h>
using namespace std;
int b,cnt,a[100010],dp1[100010],dp2[100010];
int main(){while(cin>>b){a[++cnt]=b;}for(int i=1;i<=cnt;i++){dp1[i]=1;for(int j=1;j<i;j++){if(a[j]>=a[i]){dp1[i]=max(dp1[i],1+dp1[j]);}}}int ans=1;for(int i=1;i<=cnt;i++){ans=max(ans,dp1[i]);}cout<<ans<<endl;for(int i=1;i<=cnt;i++){dp2[i]=1;for(int j=1;j<i;j++){if(a[j]<a[i]){dp2[i]=max(dp2[i],1+dp2[j]);}}}ans=1;for(int i=1;i<=cnt;i++){ans=max(ans,dp2[i]);}cout<<ans;
}

接题:

我们换一次需要用一次次数得到下-上的值,容易与想到与背包问题类似。

于是我们类比定义:f[i][j]为前i个骨牌得到j的最小次数。

易得转移方程:f[i][j]=min(f[i-1][j-(上-下)],f[i-1][j+(上-下)]+1)

有俩个细节:1.对于初值我们赋值为正无穷。

2.对于负数问题,我们平移处理。

下面是AC代码:

#include<bits/stdc++.h>
using namespace std;
#define ck 5001
int n,dp[2][10010];
struct node{int shang,xia;
}a[1010];
int main(){cin>>n;for(int i=1;i<=n;i++) scanf("%d%d",&a[i].shang,&a[i].xia);memset(dp,0x3f,sizeof(dp));dp[0][0+ck]=0;for(int i=1;i<=n;i++){for(int j=-5*i+ck;j<=5*i+ck;j++){int hh=a[i].shang-a[i].xia;dp[i%2][j]=min(dp[(i-1)%2][j-hh],dp[(i-1)%2][j+hh]+1);}}int mm=ck;if(dp[n%2][ck]<=n) cout<<dp[n%2][ck];else{int i=ck-1,j=ck+1;for(;i>=0;i--){if(dp[n%2][i]<=n) break;}for(;j<=10009;j++){if(dp[n%2][j]<=n) break;}if(i+j==2*ck) cout<<min(dp[n%2][i],dp[n%2][j]);else if(i+j>2*ck) cout<<dp[n%2][i];else cout<<dp[n%2][j]; }
}

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

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

相关文章

2.19作业

1.使用fread,fwrite完成两个文件之间的拷贝 程序代码&#xff1a; #include <myhead.h>int main(int argc, const char *argv[]) {if(argc!3){printf("input file error\n");printf("usage:./a.out srcfile destfile\n");return -1;}FILE *fpNULL;…

美国突然致敬中本聪

作者&#xff1a;秦晋 有点看不懂美国的神操作。 2月16日&#xff0c;据《Bitcoin Magazine》报道&#xff0c;比特币的竞争对手、美国参议员伊丽莎白-沃伦对比特币的立场突然180度大转弯。由反对立场转为支持立场。让很多行业媒体出乎意料&#xff0c;甚至惊掉下巴。 报道称&a…

Code Composer Studio (CCS) - 全局搜索功能

Code Composer Studio [CCS] - 全局搜索功能 1. Ctrl H&#xff0c;全局搜索功能References 1. Ctrl H&#xff0c;全局搜索功能 References [1] Yongqiang Cheng, https://yongqiang.blog.csdn.net/

Java实现Dfs算法(基本讲解)

目录 一、Dfs算法的概念 二、Dfs算法的设计步骤 三、Dfs算法模板 四、Dfs算法经典例题 &#xff08;1&#xff09;全排列 &#xff08;2&#xff09;N皇后 一、Dfs算法的概念 Depth First Search 即 DFS&#xff0c;意为深度优先搜索&#xff0c;是所有的搜索手段之一。它…

22-k8s中pod的调度-亲和性affinity

一、概述 在k8s当中&#xff0c;“亲和性”分为三种&#xff0c;节点亲和性、pod亲和性、pod反亲和性&#xff1b; 亲和性分类名称解释说明nodeAffinity节点亲和性通过【节点】标签匹配&#xff0c;用于控制pod调度到哪些node节点上&#xff0c;以及不能调度到哪些node节点上&…

2.19学习总结

1.中位数 2.统计和 3.铺设道路 4.岛屿个数 5.冶炼金属 6.飞机降落 7.接龙数列 中位数https://www.luogu.com.cn/problem/P1168 题目描述 给定一个长度为 &#xfffd;N 的非负整数序列 &#xfffd;A&#xff0c;对于前奇数项求中位数。 输入格式 第一行一个正整数 &#xfff…

NoSQL 数据库有哪些类型?

NoSQL 数据库主要可以分为下面四种类型&#xff1a; 键值&#xff1a;键值数据库是一种较简单的数据库&#xff0c;其中每个项目都包含键和值。这是极为灵活的 NoSQL 数据库类型&#xff0c;因为应用可以完全控制 value 字段中存储的内容&#xff0c;没有任何限制。Redis 和 D…

使用openeuler 22.03替代CentOS 7.9,建立虚拟机详细步骤

进入浏览器搜索网址下载openeuler 22.03镜像文件 https://mirrors.huaweicloud.com/openeuler/openEuler-22.03-LTS-SP3/ISO/x86_64/openEuler-22.03-LTS-SP3-x86_64-dvd.iso 打开VMware Workstation新建一个虚拟机&#xff1a; 自定义虚拟机位置 加入下载好的openeuler镜像文件…

Mysql的隔离级别和锁

Mysql的事务隔离级别 脏读&#xff1a;读到了未提交的数据 2、不可重复读&#xff1a; 两次读取的数据中间被修改&#xff0c;读取的数据不同。 幻读 数据库锁 悲观锁和乐观锁 死锁 一般发生在多线程执行过程中&#xff0c;因为争抢资源造成线程之间相互等待&#xff0c;这…

数据结构中图的概念以及遍历算法的实现

在数据结构中&#xff0c;图&#xff08;Graph&#xff09;是由节点&#xff08;Vertex&#xff09;和连接节点的边&#xff08;Edge&#xff09;组成的一种非线性数据结构。图可以用来表示各种实际问题中的关系和连接&#xff0c;如社交网络、道路网络、电路等。 图由两个主要…

.ma1x0勒索病毒解密方法|勒索病毒解决|勒索病毒恢复|数据库修复

尊敬的读者&#xff1a; 数据安全问题备受关注。而勒索病毒是其中一种最为恶劣的威胁之一。其中&#xff0c;.ma1x0勒索病毒备受人们担忧&#xff0c;因其可将用户的数据文件加密&#xff0c;并要求支付赎金以解密文件。本文将介绍.ma1x0勒索病毒的特征、预防方法以及如何恢复…

stable diffusion官方版本复现

踩了一些坑&#xff0c;来记录下 环境 CentOS Linux release 7.5.1804 (Core) 服务器RTX 3090 复现流程 按照Stable Diffusion的readme下载模型权重、我下载的是stable-diffusion-v1-4 版本的 1 因为服务器没法上huggingface&#xff0c;所以得把权重下载到本地&#xff…