当前位置: 首页 > news >正文

宿舍网站建设目的在线小游戏网页版

宿舍网站建设目的,在线小游戏网页版,域名与网站建设,海淀网站建设价格最长上升子序列 最长上升子序列是指在一个给定序列中#xff0c;找到一个最长的子序列#xff0c;使得子序列中的元素单调递增。例如#xff0c;序列 [1, 3, 5, 4, 7] 的最长上升子序列是 [1, 3, 5, 7]#xff0c;长度为4。 这是一个经典的动态规划问题。 假设dp[i]表示…最长上升子序列 最长上升子序列是指在一个给定序列中找到一个最长的子序列使得子序列中的元素单调递增。例如序列 [1, 3, 5, 4, 7] 的最长上升子序列是 [1, 3, 5, 7]长度为4。 这是一个经典的动态规划问题。 假设dp[i]表示以第i个元素为结尾的最长上升子序列的长度。 可以用一个嵌套循环来遍历所有的元素对如果前一个元素小于后一个元素则可以将后一个元素添加到前一个元素所在的最长上升子序列中从而得到以第i个元素为结尾的最长上升子序列长度。 具体地我们可以这样定义dp[i] for (int j 0; j i; j)if nums[j] nums[i]dp[i] max(dp[i], dp[j] 1)其中nums是给定的序列dp[i]表示以nums[i]为结尾的最长上升子序列长度j是i之前的元素。由于我们需要找到最长的上升子序列因此最终的答案应该是dp数组中的最大值。 下面是一个使用动态规划求解LIS问题的C代码 代码动态规划 #include bits/stdc.h using namespace std;// 该函数求 nums 序列的最长子序列 int lengthOfLIS(vectorint nums) {int n nums.size();// 特判空序列if (n 0) return 0;// 状态数组初始化成1因为各个元素可以单独构成一个上升序列vectorint dp(n, 1);// 从nums[1] 开始遍历整个数组for (int i 1; i n; i) {// 从前往后比那里之前的元素for (int j 0; j i; j) {// j 位置的元素值小于 i 位置的元素值则 nums[i] 可以拼接在 nums[j] 后面if (nums[j] nums[i]) { dp[i] max(dp[i], dp[j] 1);}}}// 状态数组中最大的值就是最长上升子序列的长度return *max_element(dp.begin(), dp.end());}int main() {vectorint nums {10, 9, 2, 5, 3, 7, 101, 18};int ans lengthOfLIS(nums);cout ans endl;return 0; }在上面的代码中 首先定义了一个长度为 n 的 dp 数组将其初始化为 1因为每个元素本身都可以构成一个长度为 1 的上升子序列。 然后用两个嵌套的循环来遍历所有的元素对如果前一个元素小于后一个元素则可以将后一个元素添加到前一个元素所在的最长上升子序列中从而得到以第i个元素为结尾的最长上升子序列长度。 最后我们返回dp数组中的最大值作为最长上升子序列的长度。 上述算法的时间复杂度为O(n^2)可以通过使用二分查找来将时间复杂度降为O(nlogn)。 具体来说我们可以维护一个长度为 len 的子序列其中 len 表示当前子序列的长度。 遍历所有的元素如果当前元素比子序列中的最后一个元素还大就将其添加到子序列的末尾并将子序列长度加1。 否则我们可以用二分查找找到子序列中第一个大于等于当前元素的位置将该位置上的元素替换为当前元素从而保证子序列仍然是上升的。 最终子序列的长度就是最长上升子序列的长度。 下面是一个使用二分查找求解LIS问题的C代码 代码二分优化 #include bits/stdc.h using namespace std;// 该函数求 nums 序列的最长子序列 int lengthOfLIS(vectorint nums) {int n nums.size();// 特判空序列if (n 0) return 0;// 保存状态vectorint dp;//依次遍历各个元素for (int i 0; i n; i) {// 二分法找到第一个大于等于 nums[i] 的元素的位置int pos lower_bound(dp.begin(), dp.end(), nums[i]) - dp.begin();// 如果没找到就把 nums[i] 直接加入到 状态数组if (pos dp.size()) {dp.push_back(nums[i]);} // 否则用 nums[i] 替换该位置元素 else {dp[pos] nums[i];}}// 状态数组的长度就是最长子序列的长度return dp.size();}int main() {vectorint nums {10, 9, 2, 5, 3, 7, 101, 18};int ans lengthOfLIS(nums);cout ans endl;return 0; }在上面的代码中 定义了一个空的dp数组表示当前最长上升子序列。 对于每个元素可以用lower_bound函数找到dp数组中第一个大于等于当前元素的位置pos。 然后将该位置上的元素替换为当前元素。如果pos等于dp的长度表示当前元素比子序列中的所有元素都大因此可以将其添加到子序列的末尾。 最终子序列的长度就是最长上升子序列的长度。 时间复杂度为O(nlogn)空间复杂度为O(n)。可以看到使用二分查找算法的时间复杂度要比暴力算法低得多因此在实际应用中更为常用。 Java代码 import java.util.*; public class Main{public static void main(String[] args){Scanner scan new Scanner(System.in);int N 1010;int[] f new int[N]; //以i为结尾的数的上升子序列中最大值int[] a new int[N]; //数列int n scan.nextInt();for(int i 1 ; i n ; i ){a[i] scan.nextInt();}for(int i 1 ; i n ; i ){// 以i为结尾的数的上升子序列中最大值每个数最低的个数就是1所以将每一个数一开始初始化成1f[i] 1; //求以i为结尾的最长上升子序列就是求他的f[i - 1] 的最长上升子序列加上1就是i本身for(int j 1 ; j i ; j ){if(a[i] a[j]) // 枚举前面的数如果前面比i这个数小的就加1一直加到枚举到i - 1f[i] Math.max(f[i],f[j] 1);} }int res 0;for(int i 1 ; i n ; i ){res Math.max(res,f[i]);}System.out.println(res);} }类型题怪盗基德的滑翔翼 题目描述 怪盗基德是一个充满传奇色彩的怪盗专门以珠宝为目标的超级盗窃犯。 而他最为突出的地方就是他每次都能逃脱中村警部的重重围堵而这也很大程度上是多亏了他随身携带的便于操作的滑翔翼。 有一天怪盗基德像往常一样偷走了一颗珍贵的钻石不料却被柯南小朋友识破了伪装而他的滑翔翼的动力装置也被柯南踢出的足球破坏了。 不得已怪盗基德只能操作受损的滑翔翼逃脱。 假设城市中一共有N幢建筑排成一条线每幢建筑的高度各不相同。 初始时怪盗基德可以在任何一幢建筑的顶端。 他可以选择一个方向逃跑但是不能中途改变方向因为中森警部会在后面追击。 因为滑翔翼动力装置受损他只能往下滑行即只能从较高的建筑滑翔到较低的建筑。 他希望尽可能多地经过不同建筑的顶部这样可以减缓下降时的冲击力减少受伤的可能性。 请问他最多可以经过多少幢不同建筑的顶部(包含初始时的建筑) 分析 怪盗基德可以从任意一个楼房出发只能向低的楼房跳倒着看就是最长上升子序列同时他可以向两个方向跳因此需要正反两个方向求最长上升子序列也可以一个方向分别求上升和下降。 代码 #includebits/stdc.h using namespace std; const int N 110; int f[N],a[N],d[N]; int k,n;int main() {scanf(%d,k);while(k--){scanf(%d,n);// memset(f,1,sizeof(f));// memset(a,0,sizeof(a));for(int i1;in;i){f[i] 1;d[i] 1;scanf(%d,a[i]);}for(int i1;in;i)for(int j1;ji;j){if(a[j]a[i])f[i] max(f[i],f[j]1);if(a[j]a[i])d[i] max(d[i],d[j]1);}int res 0;for(int i1;in;i)res max(res,max(f[i],d[i]));printf(%d\n,res);}return 0;}
http://www.zqtcl.cn/news/12579/

相关文章:

  • 慈溪市建设局网站流量与网站
  • 金华专业网站建设公司乌镇网站建设标书
  • 益阳网站建设广告do_action wordpress
  • 营销网站建设设计今天的新闻联播内容
  • 石家庄做手机网站推广邯郸网站设计价位
  • 设计网站费用多少网站建设哪家服务周到
  • 哪个网站可以做纸箱手机网站建设事项
  • 普陀网站制作wordpress自动评论插件
  • 自动提卡的网站怎么做的腾讯云官网入口
  • 做网站好还是app好陕西富通建设工程有限公司网站
  • 三合一网站介绍网站为什么备案
  • 无锡 做网站合肥网站建设网站推广
  • 网站建设 图片栏目介绍手机网站模板怎么用
  • 大学科技园东区 做网站网络规划设计师试题
  • 家政服务公司网站源码wordpress 怎么安装
  • 教手工做衣服的网站阿柳云wordpress
  • 网站制作论文文献综述河北石家庄建设信息网
  • 大连关键词优化服务sem和seo是什么职位
  • 在什么网站可以自承包活来做全国工商核名查询系统官网
  • zf厂手表网站下载中心官方网站建设银行
  • 市场营销网站建设屏蔽wordpress google
  • 微信官网网站模板邯郸seo
  • 沧州做网站哪家好乐清门户网站建设
  • 鄂州网站设计公司国际人才网中山招聘网
  • 安全的集团网站建设自动化设备东莞网站建设
  • idea的网站开发登录页面大连网络公司排名
  • 网站接单做项目wordpress短代码页面
  • 成都网站优化步骤wordpress 做的人多吗?
  • 购物网站logowordpress引用文章
  • php企业网站开发实验总结网站设计需要在哪方面提升