算法基础精选题单 动态规划(dp)(递推+线性dp)(个人题解)

前言:

  一些简单的dp问题。

正文:

题单:237题】算法基础精选题单_ACM竞赛_ACM/CSP/ICPC/CCPC/比赛经验/题解/资讯_牛客竞赛OJ_牛客网 (nowcoder.com)

递推:

NC235911 走楼梯:

#include<bits/stdc++.h>
using namespace std;
long long dp[150];
int main(){int n;cin>>n;dp[1]=1;dp[0]=1;for(int i=2;i<=n;i++){dp[i]=dp[i-1]+dp[i-2];}cout<<dp[n];return 0;
}

dp中最经典的问题,就不展开说了。

线性dp:

NC22096 数字三角形:

#include<bits/stdc++.h>
using namespace std;
int main(){int n;while(cin>>n){for(int i=1;i<=n;i++){for(int j=1;j<=i;j++){cout<<j<<" ";}cout<<endl;}}return 0;
} 

这题不知道和dp有什么关系,直接两层循环输出就行了。

NC16708 过河卒:

#include<bits/stdc++.h>
using namespace std;
long long dp[55][55];
void con(int x,int y){dp[x][y]=-1;if(x+1>=0&&y+2>=0)dp[x+2][y+1]=-1;if(x+2>=0&&y+1>=0)dp[x+1][y+2]=-1;if(x+2>=0&&y+1>=0)dp[x-1][y+2]=-1;if(x-2>=0&&y+1>=0)dp[x-2][y+1]=-1;if(x-2>=0&&y-1>=0)dp[x-2][y-1]=-1;if(x-1>=0&&y-2>=0)dp[x-1][y-2]=-1;if(x+1>=0&&y-2>=0)dp[x+1][y-2]=-1;if(x+2>=0&&y-1>=0)dp[x+2][y-1]=-1;
}
int main(){int n,m,x,y;cin>>n>>m>>x>>y;con(x+1,y+1);dp[1][1]=1;for(int i=1;i<=21;i++){for(int j=1;j<=21;j++){if(dp[i][j]!=-1){if(dp[i-1][j]!=-1)dp[i][j]+=dp[i-1][j];if(dp[i][j-1]!=-1)dp[i][j]+=dp[i][j-1];}}}cout<<dp[n+1][m+1];return 0;
} 

在地图上标记好马的位置与马能走到的另外八个位置,在状态转移的时候记得注意该点状态永远为0。最后输出终点的状态。

NC16619 传球游戏:

#include<bits/stdc++.h>
using namespace std;
int n,m;
long long dp[105][105];
int main(){cin>>n>>m;dp[0][1]=1;for(int i=1;i<=m;i++){for(int j=1;j<=n;j++){if(j==1){dp[i][j]=dp[i-1][n]+dp[i-1][j+1];}else if(j==n){dp[i][j]=dp[i-1][1]+dp[i-1][j-1];}else{dp[i][j]=dp[i-1][j-1]+dp[i-1][j+1];}}}cout<<dp[m][1];return 0;
}

dp[i][j]表示在传球次数达到i次时球到达j手上的方法数,状态转移方程我们可以由球只能从左右两侧传来,所以知方程dp[i][j]=dp[i-1][j-1]+dp[i-1][j+1],注意特判j=1和n的情况。

NC16810 [NOIP1999]拦截导弹:

#include <bits/stdc++.h>
using namespace std;
int a[1001],dp[1001];
int main()
{int p=0,flag=0;while(cin>>a[++p]){}p--;int ans=0;for(int i=1;i<=p;i++){ flag=0;for(int j=i-1;j>=1;j--)if (a[i]<=a[j]) flag=max(flag,dp[j]);if (flag==0) dp[i]=1;else dp[i]=flag+1;ans=max(ans,dp[i]);//cout<<dp[i]<<endl;}cout<<ans<<endl;memset(dp,0,sizeof(dp));ans=0;for(int i=1;i<=p;i++){ flag=0;for(int j=i-1;j>=1;j--)if (a[i]>a[j]) flag=max(flag,dp[j]);if (flag==0) dp[i]=1;else dp[i]=flag+1;ans=max(ans,dp[i]);//cout<<dp[i]<<endl;}cout<<ans<<endl;return 0;
}

Dilworth定理:最小链覆盖=最长反链长度,所以需要的系统就为这个序列的最长上升列长度,而一个系统最多能拦截的值就为反转的数列的最长上升子序列长度。求两个最长上升子序列即可。

NC235948 最大子串和:

#include<bits/stdc++.h>
using namespace std;
const int N = 310;
int n, m;
int g[N][N];
int f[N][N];
int dx[4] = {-1, 0, 1, 0}, dy[4] = {0, 1, 0, -1};
int dp(int x, int y){int &v = f[x][y];if (v != -1) return v;v = 1;for (int i = 0; i < 4; i ++ ){int a = x + dx[i], b = y + dy[i];if (a >= 1 && a <= n && b >= 1 && b <= m && g[x][y] > g[a][b])v = max(v, dp(a, b) + 1);}return v;
}int main(){cin>>n>>m;for (int i = 1; i <= n; i ++ )for (int j = 1; j <= m; j ++ )scanf("%d", &g[i][j]);memset(f, -1, sizeof f);int res = 0;for (int i = 1; i <= n; i ++ )for (int j = 1; j <= m; j ++ )res = max(res, dp(i, j));printf("%d\n", res);return 0;
}

经典的记忆化搜索的题,我觉得比起dp更像搜索。从最高点开始向四周搜索,结束时一定是最长的路径在dp中,因为搜索结束了就表示最长的那条线已经走完了。

NC235948 最大子串和:

#include<bits/stdc++.h>
using namespace std;
long long a[1000005],dp[1000005];
int main(){long long n,ans=0;cin>>n;for(int i=1;i<=n;i++){cin>>a[i];dp[i]=max(dp[i-1]+a[i],dp[i]);ans=max(ans,dp[i]);}cout<<ans;return 0;
}

从某一个数字来看,它的最大连续子串和是前面一个数字的最大连续子串和加上它本身,和他本身取较大的那一个。当位于第一个的时候自然就是他自身所以可以实现一个动态规划。故递推式:dp[i] = max(dp[i-1]+dp[i], dp[i])。

NC235624 牛可乐和最长公共子序列:

#include<bits/stdc++.h>
using namespace std;
int dp[5005][5005];
int main(){string s,t;while(cin>>s>>t){if(s[0]==t[0])dp[1][1]=1;int ans=0;//memset(dp,0,sizeof(dp));int n=s.size(),m=t.size();for(int i=1;i<=n;i++){for(int j=1;j<=m;j++){if(s[i-1]==t[j-1])dp[i][j]=dp[i-1][j-1]+1;else dp[i][j]=max(dp[i][j-1],dp[i-1][j]);ans=max(dp[i][j],ans);}}cout<<ans<<endl;}return 0;
}

最长上升子序列的模板题。

后记:

  刷题的日子才过去两天怎么感觉我现在已经有点萎了,果然坚持下去是一件非常难的事啊。加油吧!

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

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

相关文章

在k8s上部署一个简单的应用

部署一个简单的应用 实验目标&#xff1a; 部署一个简单的 web 应用&#xff0c;比如 Nginx 或者一个自定义的 Node.js 应用。 实验步骤&#xff1a; 创建一个 Deployment。创建一个 Service 来暴露应用。验证应用是否可以通过 Service 访问。 今天我们来做一下昨天分享的可…

Debian12的#!bash #!/bin/bash #!/bin/env bash #!/usr/bin/bash #!/usr/bin/env bash

bash脚本开头可写成 #!/bin/bash , #!/bin/env bash , #!/usr/bin/bash , #!/usr/bin/env bash #!/bin/bash , #!/usr/bin/bash#!/bin/env bash , #!/usr/bin/env bash Debian12的 /bin 是 /usr/bin 的软链接, /sbin 是 /usr/sbin 的软链接, (Debian12默认没有ll命令,用的ls …

Python的pandas读取excel文件中的数据

一、前言 hello呀&#xff01;各位铁子们大家好呀&#xff0c;我是一个在软件测试行业摸爬滚打十几年的老江湖了&#xff0c;今天呢来和大家聊一聊用Python的pandas读取excel文件中的数据。 二、读取Excel文件 使用pandas的read_excel()方法&#xff0c;可通过文件路径直接读…

Techviz:XR协作工作流程,重塑远程电话会议新形式

在当今快速发展的数字环境中&#xff0c;无缝远程协作的需求正在成为企业多部门协同工作的重中之重&#xff0c;尤其是对于制造业、建筑和设计等行业的专业人士而言&#xff0c;这一需求更加迫切。传统的远程电话会议协作形式存在着延滞性&#xff0c;已经渐渐跟不上当今快节奏…

项目三OpenStack基础环境配置与API使用

任务一 了解OpenStack基础环境配置 1.1 •数据库服务器 1.2 •消息队列服务 •AMQP系统的组成 任务二 了解并使用OpenStack API 2.1 •什么是RESTful API • RESTful API 是目前比较成熟的 一套Internet应用程序的API软件架构 。 • 表现 层&#xff08; Representation …

汽车IVI中控开发入门及进阶(三十一):视频知识扫盲

有效的视频资源管理需要集成许多不同的底层技术,共同为用户提供给定应用程序的最佳体验。其中许多技术是从早期电视广播中使用的技术演变而来的。其他方法,如用于通过网络流式传输视频的压缩方法,相对较新且不断发展。 以下详细概述了与图形和视频处理和传输相关的一些基本…

云上宝库:三大厂商对象存储安全性及差异性比较

前言 看了几家云厂商的对象存储&#xff0c;使用上有相似也有差异&#xff0c;聊聊阿里云、腾讯云、京东云三家对象存储在使用中存在的风险以及防护措施。 0x01 云存储命名 阿里云对象存储OSS(Object Storage Service)&#xff0c;新用户免费试用三个月&#xff0c;存储包容…

安装idea后配置的全局配置

1、打开IDEA应用&#xff1a;Customize→All settings...&#xff0c;如果启动IDEA后&#xff0c;默认打开的是之前的项目&#xff0c;可以关闭当前项目&#xff1a;File→Close Project&#xff0c;就退到全局配置界面了。 2、打开全局配置界面&#xff1a;Editor→File Encod…

斯巴达(Spartanhost)VPS的性能评测

原创原文链接&#xff1a;详细斯巴达&#xff08;Spartanhost&#xff09;VPS的性能和购买价值评测 | BOBO Blog (soulcloser.com)https://www.soulcloser.com/3398/ 引言 最近看了全球的VPS商家&#xff0c;想搞台网站高性能的服务器&#xff0c;发现一个特别有意思的商家竟…

Mathtype7永久无限免费安装包下载地址2024最新方法步骤

亲爱的数学爱好者们&#xff0c;今天我要分享一个让数学表达变得超级简单的神器——Mathtype7最新破解版&#xff01;&#x1f389; 这不仅仅是个软件&#xff0c;而是打开高效学习和工作的钥匙。准备好了吗&#xff1f;让我们一起探索这个神奇的工具&#xff01; MathType最新…

通过ModelScope开源Embedding模型将图片转换为向量

本文介绍如何通过ModelScope魔搭社区中的视觉表征模型将图片转换为向量&#xff0c;并入库至向量检索服务DashVector中进行向量检索。 ModelScope魔搭社区旨在打造下一代开源的模型即服务共享平台&#xff0c;为泛AI开发者提供灵活、易用、低成本的一站式模型服务产品&#xf…

空间复杂度的相关概念

1. 空间复杂度 空间复杂度&#xff08;space complexity&#xff09;用于衡量算法占用内存空间随着数据量变大时的增长趋势。 统计哪些空间&#xff1a; ● 暂存数据&#xff1a;用于保存算法运行过程中的各种常量、变量、对象等。 ● 栈帧空间&#xff1a;用于保存调用函数…

keil MDK自动生成带版本bin文件

作为嵌入式单片机开发&#xff0c;在Keil MDK&#xff08;Microcontroller Development Kit&#xff09;中开发完编译完后&#xff0c;经常需要手动进行版本号添加用于发版&#xff0c;非常麻烦&#xff0c;如果是对外发行的话&#xff0c;更容易搞错&#xff0c;特此码哥提供一…

SpringCloud Alibaba Sentinel 流量控制之流控模式实践总结

官网文档&#xff1a;https://sentinelguard.io/zh-cn/docs/flow-control.html wiki地址&#xff1a;https://github.com/alibaba/Sentinel/wiki/%E6%B5%81%E9%87%8F%E6%8E%A7%E5%88%B6 本文版本&#xff1a;spring-cloud-starter-alibaba&#xff1a;2.2.0.RELEASE 如下图所…

企业如何选择合适的CRM工具?除Salesforce之外的10大主流选择

对比salesforce&#xff0c;其他10款优秀CRM&#xff1a;纷享销客CRM、Zoho CRM、腾讯企点、销售易、企业微信 (WeCom)、Odoo CR、OroCRM、金蝶、用友CRM、EspoCRM 虽然Salesforce以其全面的功能和强大的市场占有率在海外收获了许多客户&#xff0c;但Salesforce在国内市场的接…

多环境镜像晋级/复用最佳实践

作者&#xff1a;木烟 本文主要介绍镜像构建部署场景&#xff0c;多环境镜像晋级/复用最佳实践&#xff0c;保证“所发即所测”。 场景介绍 应用研发场景有效地管理镜像产物是确保软件快速、安全、可靠部署的关键环节。通常一个应用研发需要经过测试、预发、生产各个阶段&am…

Windows下MySQL数据库定期备份SQL文件与删除历史备份文件.bat脚本

目录 一、功能需求 二、解决方案 (1)新建文件夹及批处理文件 (2)编写备份脚本 ①完整脚本 ②参数修改 (3)编写定期删除备份脚本 ①根据文件名识别日期进行删除 ② 根据文件的修改日期删除 (4)设置定时器 (5)常见报错与处理 一、功能需求 在Windows系统下…

minSdkVersion、targetSdkVersion、compileSdkVersion三者的作用解析

minSDK和targetSDK&#xff0c;这两者相当于一个区间。你能够用到targetSDK中最新的API和最酷的新功能&#xff0c;但又需要向后(向下)兼容到minSDK&#xff0c;保证这个区间内的设备都能够正常的执行你的APP。换句话说&#xff0c;想使用Android刚刚推出的新特性&#xff0c;但…

JAVA 注解搜索工具类与注解原理讲解(获取方法和类上所有的某个注解,父类继承的注解也支持获取)

文章目录 JAVA 注解搜索工具类与注解原理讲解&#xff08;获取方法和类上所有的某个注解&#xff0c;父类继承的注解也支持获取&#xff09;代码测试方法上加注解&#xff0c;类上不加类上加注解、方法上加注解 注解原理性能测试 JAVA 注解搜索工具类与注解原理讲解&#xff08…

汉化版PSAI全面测评,探索国产AI绘画软件的创新力量

引言 随着AI技术的飞速发展&#xff0c;图像处理和绘画领域迎来了新的变革。作为一名AIGC测评博主&#xff0c;今天我们测评的是一款国产AI绘画软件——StartAI&#xff0c;一句话总结&#xff1a;它不仅在技术上毫不逊色于国际大牌&#xff0c;更在用户体验和本地化服务上做到…