动态规划,复习

一.动态规划

1.

思路:每次递增序列结束都取最优解

class Solution {
public:int findLengthOfLCIS(vector<int>& nums) {int ans = -1,temp = 1;for(int i = 0;i<nums.size()-1;i++){if(nums[i]<nums[i+1]) temp++;else{ans = max(ans,temp);temp = 1;}}ans = max(ans,temp);return ans;}
};

 2.

思路:动态规划五部曲

/*
dp[i]表示以i为结尾的最长子序列的长度
递推公式为前i项的哪个有最大子序列长度,哪个就是dp[i]=max(dp[i],dp[j]+1)
初始化为每个长度都为1;
前到后
*/class Solution {
public:int lengthOfLIS(vector<int>& nums) {vector<int>dp(nums.size()+1,1);for(int i = 0;i<nums.size();i++){for(int j = 0;j<i;j++){if(nums[i]>nums[j])dp[i] = max(dp[j]+1,dp[i]);}}return ranges::max(dp);}
};

 3./

思路:动规五部曲

/*
dp[i][j]表示为nums1前i-1项,和nums2前j-1项最大的重复子集dp[i][j];
dp[i][j] = dp[i-1][j-1]+1
初始化都为0
*/class Solution {
public:int findLength(vector<int>& nums1, vector<int>& nums2) {vector<vector<int>> dp (nums1.size() + 1, vector<int>(nums2.size() + 1, 0));int result = 0;for (int i = 1; i <= nums1.size(); i++) {for (int j = 1; j <= nums2.size(); j++) {if (nums1[i - 1] == nums2[j - 1]) {dp[i][j] = dp[i - 1][j - 1] + 1;}if (dp[i][j] > result) result = dp[i][j];}}return result;}
};

 4.

思路:动规五部曲

 

/*
dp[i][j]表示为text1前i-1项和text2的前j-1项的最大公共子序列长度
递推公式:dp[i][j] = dp[i-1][j-1]+1
初始化为0
*/class Solution {
public:int longestCommonSubsequence(string text1, string text2) {vector<vector<int>>dp(text1.size()+1,vector<int>(text2.size()+1,0));for(int i = 1; i <= text1.size(); i++){for(int j = 1; j <= text2.size(); j++){if(text1[i-1]==text2[j-1])dp[i][j] = dp[i-1][j-1]+1;elsedp[i][j] = max(dp[i-1][j],dp[i][j-1]);}}return dp[text1.size()][text2.size()];}
};

二.回顾

1. 埃拉托斯特尼筛法

#include <iostream>
#include <vector>
using namespace std;const int MAX_N = 100000000; // n 的最大值为 10^8// 埃拉托斯特尼筛法
void sieve_of_eratosthenes(int n, vector<int>& primes) {vector<bool> is_prime(n + 1, true); // 默认所有数是素数is_prime[0] = is_prime[1] = false;  // 0 和 1 不是素数for (int i = 2; i * i <= n; ++i) {if (is_prime[i]) {for (int j = i * i; j <= n; j += i) {is_prime[j] = false;}}}// 收集所有素数for (int i = 2; i <= n; ++i) {if (is_prime[i]) {primes.push_back(i);}}
}int main() {ios::sync_with_stdio(0); // 加速 cin 和 coutint n, q;cin >> n >> q;// 找到小于等于 n 的所有素数vector<int> primes;sieve_of_eratosthenes(n, primes);// 处理每个查询while (q--) {int k;cin >> k;cout << primes[k - 1] << endl;  // 输出第 k 小的素数}return 0;
}

2.二分

思路:二分答案加贪心

class Solution {
public:int splitArray(vector<int>& nums, int k) {int l = 0,r= 0;for(int t:nums)r +=t;int ans = 0;while(l<=r){int mid = (r+l)>>1;if(check(nums,mid,k)){ans = mid;r = mid-1;}elsel = mid+1;}return ans;}bool check(vector<int>& nums,int mid,int k){int sum = 0;int count = 1;for(int i = 0;i<nums.size();i++){if(nums[i]>mid)return false;sum+=nums[i];if(sum>mid){count++;sum = nums[i];if(count>k)return false;}}return true;}
};

3.二分 

思路:二分答案模板题

#include <stack>
#include <cstdio>
#include <iostream>
#include <algorithm>
#include <cstring>
#include <vector>
#include <climits>
#include <cstdlib>
#include <cmath>
#include <unordered_set>
#include <unordered_map>
#include <map>
#include <set>
#include <cctype>
using namespace std;const int MAXN = 50001;
int stone[MAXN], a, n, m;bool check(int d) {int p = 0, ans = 0;for (int i = 1; i <= n; i++) {if (stone[i] - p < d) ans++;else p = stone[i];}if (ans <= m) return true;else return false;
}int main() {scanf("%d %d %d", &a, &n, &m);for (int i = 1; i <= n; i++) scanf("%d", &stone[i]);stone[++n] = a;int l = 0, r = a, mid;while (l < r) {mid = (l + r + 1) / 2;if (check(mid)) l = mid;else r = mid - 1;}printf("%d\n", l);return 0;
}

4.卡特兰数

#include <stack>
#include <cstdio>
#include <iostream>
#include <algorithm>
#include <cstring>
#include <vector>
#include <climits>
#include <cstdlib>
#include <cmath>
#include <unordered_set>
#include <unordered_map>
#include <map>
#include <set>
#include <cctype>using namespace std;int main() {int n;cin >> n;long long dp[10000];dp[0] = 1; dp[1] = 1;for (int i = 2; i <= 2 * n + 1; i++) {dp[i] = i * dp[i - 1];}cout << dp[2 * n] / (dp[n] * dp[n] * (n + 1));return 0;
}

 三.算阶

1.

思路:单调栈

#include <stack>
#include <cstdio>
#include <iostream>
#include <algorithm>
#include <cstring>
#include <vector>
#include <climits>
#include <cstdlib>
#include <cmath>
#include <unordered_set>
#include <unordered_map>
#include <map>
#include <set>
#include <cctype>using namespace std;int main() {int n; while (cin >> n && n != 0) {vector<long long>arr(n + 2,0);for (int i = 1; i <= n; i++)cin >> arr[i];long long stk[100005], top = 0;long long ans = INT_MIN;for (int i = 0; i <= n + 1; i++) {while (top && arr[stk[top]] > arr[i]) {int cur = stk[top--];int high = arr[cur];int weihgt = i - stk[top] - 1;ans = ans > high * weihgt ? ans : high * weihgt;}stk[++top] = i;}cout << ans << endl;}return 0;
}

 四.分治

1.

思路:归并排序的思想加上分治,先左边,在右边,在跨左右计算小和

#include <stack>
#include <cstdio>
#include <iostream>
#include <algorithm>
#include <cstring>
#include <vector>
#include <climits>
#include <cstdlib>
#include <cmath>
#include <unordered_set>
#include <unordered_map>
#include <map>
#include <set>
#include <cctype>using namespace std;const int N = 100005;
long long arr[N], help[N];
int n;long long merge(int l, int mid, int r) {long long sum = 0, ans = 0;for (int i = l, j = mid + 1, sum = 0; j <= r; j++) {while (arr[i] <= arr[j] && i <= mid) sum += arr[i++];ans += sum;}int i = l;int a = l;int b = mid + 1;while (a <= mid && b <= r)help[i++] = arr[a] <= arr[b] ? arr[a++] : arr[b++];while (a <= mid)help[i++] = arr[a++];while (b <= r)help[i++] = arr[b++];for (int i = l; i <= r; i++)arr[i] = help[i];return ans;
}long long small(int l, int r) {if (l == r)return 0;int mid = (l + r) / 2;return small(l, mid) + small(mid + 1, r) + merge(l, mid, r);}int main() {cin >> n;for (int i = 0; i < n; i++)cin >> arr[i];cout << small(0, n - 1);return 0;
}

 

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

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

相关文章

【鸿蒙开发】第三十八章 ArkTS代码调试

debug启动调试attach启动调试等待调试使用断点检查变量使用调试器反向调试extension调试worker/taskpool调试Evaluate and logSmart Step Into 1 debug启动调试 如果需要设置断点调试&#xff0c;找到需要暂停的代码片断&#xff0c;点击该代码行的左侧边线&#xff0c;或将光…

个人简历html网页模板,科技感炫酷html简历模板

炫酷动效登录页 引言 在网页设计中,按钮是用户交互的重要元素之一。这样一款黑色个人简历html网页模板,科技感炫酷html简历模板,设计效果类似科技看板图,可帮您展示技能、任职经历、作品等,喜欢这种风格的小伙伴不要犹豫哦。该素材呈现了数据符号排版显示出人形的动画效…

Python深度学习环境配置(Pytorch、CUDA、cuDNN),包括Anaconda搭配Pycharm的环境搭建以及基础使用教程(保姆级教程,适合小白、深度学习零基础入门)

全流程导览 一、前言二、基本介绍2.1全过程软件基本介绍2.1.1 Pytorch2.1.2 Anaconda2.1.3 Pycharm2.1.4 显卡GPU及其相关概念2.1.5 CUDA和cuDNN 2.2 各部分相互间的联系和安装逻辑关系 三、Anaconda安装3.1安装Anaconda3.2配置环境变量3.3检验是否安装成功 四、Pycharm安装五、…

案例-18.文件上传-阿里云OSS-集成

一.分析 要想将阿里云oss集成到新增员工的功能中&#xff0c;必须要设计文件上传的接口UploadController。首先前端给接口上传接口需要接收请求的图片&#xff0c;然后接口再将图片上传到阿里云oss中存储起来&#xff0c;接着接口从阿里云oss中获取图片的url并返回给前端&#…

在Unity中用简单工厂模式模拟原神中的元素反应

1. 第一步创建3个脚本Factory&#xff08;反应工厂&#xff09;&#xff0c;Reactions&#xff08;具体反应&#xff09;&#xff0c;FactoryText&#xff08;测试反应的脚本&#xff09; 2.编写工厂脚本 using UnityEngine;// 定义一个元素反应的接口&#xff0c;所有具体的元…

Markdown 常用语法及示例

介绍 Markdown 是一种轻量级标记语言&#xff0c;广泛用于编写文档、README 文件、博客文章等。本文将介绍 Markdown 的一些常用语法&#xff0c;帮助你快速上手。官网地址1 1. 标题 Markdown 使用井号 # 来表示标题&#xff0c;井号的数量决定了标题的级别&#xff0c;最多…

Ubuntu USB耳机找不到设备解决

​ 一. 确定硬件连接 lsusb -t 插拔USB耳机&#xff0c;确定是否有USB识别到 二. 查看输出设备 sudo apt-get install pavucontrol pavucontrol 点击想要使用的输出设备后面的绿色选项 三. 输出设备没有USB耳机时调试 3.1 确认ALSA是否识别设备 列出ALSA播放设备&#…

企业软件合规性管理:构建高效、安全的软件资产生态

引言 在数字化转型的浪潮下&#xff0c;企业的软件使用方式日益多元化&#xff0c;涉及云端、订阅制、永久授权及浮动许可等多种模式。然而&#xff0c;随着软件资产的增多&#xff0c;企业面临着合规性管理的严峻挑战&#xff1a;非法软件使用、许可证管理不当、软件资产闲置…

el-table树状表格,默认展开第一个节点的每一层

效果如图 <template><el-table:data"tableData"style"width: 100%":tree-props"{ children: children, hasChildren: hasChildren }":expand-row-keys"expandRowKeys"row-key"id"expand-change"handleExpan…

C ASCII字符表示

1-1 ASCII字符表示 sprintf(buf, "A5%c%02d", SOFTWARE_VERSRION_1 A - 1, (U16)SOFTWARE_VERSRION_4); 在程序中通常会出现这样的写法&#xff0c;A对应的ASCII字符表示的含义是65&#xff0c;一直往后到95获得的支付是B是66&#xff0c;然后Z对应的是90&#xff…

【iOS】包大小和性能稳定性优化

包大小优化 图片 LSUnusedResources 扫描重复的图片 ImageOptim,压缩图片 压缩文件 优化音视频资源 &#xff0c;使用MP3 代替 WAV ffmpeg -i input.mp3 -b:a 128k output.mp3 视频 H.265&#xff08;HEVC&#xff09; 代替 H.264 ffmpeg ffmpeg -i input.mp4 -vcodec lib…

智能选路+NAT实验

智能选路NAT实验 1.拓扑 2.配置 1.配IP&#xff08;按图配&#xff0c;略&#xff09; 2.配真实DNS服务器 3.虚拟服务器 4.配置DNS透明代理功能 [USG6000V1]dns-transparent-policy [USG6000V1-policy-dns]dns t [USG6000V1-policy-dns]dns transparent-proxy en [USG6000…

【Linux网络-网络基础】TCP/IP五层(或四层)模型+网络传输的基本流程

一、TCP/IP五层&#xff08;或四层&#xff09;模型 TCP/IP 是一组协议的代名词&#xff0c;它还包括许多协议&#xff0c;组成了 TCP/IP 协议簇。 TCP/IP 通讯协议采用了 5 层的层级结构&#xff0c;每一层都呼叫它的下一层所提供的网络来完成自己的需求。 ❍ 物理层&#…

POI优化Excel录入

57000单词原始录入时间258S 核心代码: List<Word> wordBookList ExcelUtil.getReader(file.getInputStream()).readAll(Word.class);if (!CollectionUtil.isEmpty(wordBookList)) {for (Word word : wordBookList) {//逐条向数据库中插入单词wordMapper.insert(word);}…

Solon —— 容器

说明 Solon 的核心概念有 IoC、AOP 和本地事件总线。有人常常有误解以为 IoC 和 AOP 是 Spring 提出的&#xff0c;其实这两种思想在Spring 之前就已经有了&#xff0c;但 Spring 把这两个思想在技术上落地和推广做得很好&#xff0c;让 Ioc 和 AOP 广为人知。 核心概念 IoC…

java每日精进 2.13 MySql迁移人大金仓

1.迁移数据库 1. 数据库创建语句 MySQL&#xff1a; CREATE DATABASE dbname; 人大金仓&#xff08;Kingbase&#xff09;&#xff1a; 在人大金仓中&#xff0c;CREATE DATABASE 的语法通常相同&#xff0c;但可能需要特别注意字符集的指定&#xff08;如果涉及到多语言支持…

《DeepSeek 一站式工作生活 AI 助手》

最近国产AI工具DeepSeek在全球火出圈&#xff0c;登顶多个国家应用商店&#xff0c;下载量一路飙升。这匹AI “黑马” 到底凭什么征服全球用户&#xff1f;让我们全方位解锁DeepSeek——从基础入门到高阶玩法&#xff0c;从实用技巧到隐藏功能。 DeepSeek是一款功能强大的国产A…

php-fpm

摘要 php-fpm(fastcgi process manager)是PHP 的FastCGI管理器&#xff0c;管理PHP的FastCGI进程&#xff0c;提升PHP应用的性能和稳定性 php-fpm是一个高性能的php FastCGI管理器&#xff0c;提供了更好的php进程管理方式&#xff0c;可以有效的控制内存和进程&#xff0c;支…

istio实现灰度发布,A/B发布, Kiali网格可视化(二)

代码发布是软件开发生命周期中的一个重要环节&#xff0c;确保新功能和修复能够顺利上线。以下是几种常见的代码发布流程。在学习灰度发布之前。我们首先回忆下代码发布常用的几种方法。 A/B&#xff08;蓝绿&#xff09;发布&#xff1a; 蓝绿部署是一种通过维护两套独立的环…

从零搭建微服务项目Base(第7章——微服务网关模块基础实现)

前言&#xff1a; 在前面6章的学习中已经完成了服务间的调用实现&#xff0c;即各微服务通过nacos或eureka服务器完成服务的注册&#xff0c;并从nacos中拉取配置实现热更新。当某个服务接口需要调用其他服务时&#xff0c;通过feign定义接口&#xff0c;并通过注解配置服务名…