首页 > 其他分享 >每日OJ_牛客_最长递增子序列(dp/贪心模板)

每日OJ_牛客_最长递增子序列(dp/贪心模板)

时间:2024-09-04 19:52:03浏览次数:13  
标签:arr OJ nums int ++ 牛客 vector dp

目录

牛客_最长递增子序列(dp/贪心模板)

解析代码


牛客_最长递增子序列(dp/贪心模板)

最长公共子序列__牛客网


解析代码

在一个序列中找最长递增子序列,动态规划的典型应用,下面是两个模版

CISdp模板:

#include <iostream>
#include <vector>
using namespace std;

int LIS(vector<int>& arr)
{	// Longest increasing subsequence
	int n = arr.size(), res = 1;
	vector<int> dp(n, 1);
	for (int i = 1; i < n; ++i)
	{
		for (int j = 0; j < i; ++j)
		{
			if (arr[i] > arr[j])
				dp[i] = max(dp[i], dp[j] + 1);
		}
        res = max(res, dp[i]);
	}
	return res;
}

int main()
{
	int n = 0;
	while (cin >> n)
	{
        vector<int> arr(n);
        for(int i = 0; i < n; ++i)
        {
            cin >> arr[i];
        }
		cout << LIS(arr) << endl;
	}
	return 0;
}

LIS贪心模板:

#include <iostream>
#include <vector>
using namespace std;

int LIS(vector<int>& arr)
{
    int n = arr.size();
	vector<int> nums;
    nums.push_back(arr[0]);
	for (int i = 1; i < n; ++i)
	{
        if(arr[i] > nums.back())
        {
            nums.push_back(arr[i]);
        }
        else
        {
            auto it = lower_bound(nums.begin(), nums.end(), arr[i]);
            if(it != nums.end())
                *it = arr[i];           
        }
	}
	return nums.size();
}

int main()
{
	int n = 0;
	while (cin >> n)
	{
        vector<int> arr(n);
        for(int i = 0; i < n; ++i)
        {
            cin >> arr[i];
        }
		cout << LIS(arr) << endl;
	}
	return 0;
}

标签:arr,OJ,nums,int,++,牛客,vector,dp
From: https://blog.csdn.net/GRrtx/article/details/141818964

相关文章

  • 概期DP做题记录
    概期DPP3600考虑\(ans\in[1,x]\),那么有:\[\begin{aligned}E(ans)&=\sum_{i\in[1,x]}iP(ans=i)\\&=\sum_{i\in[1,x]}P(ans\geqi)\\&=\sum1-P(ans<i)\\&=x-\sumP(ans<i)\end{aligned}\]我们就只需要计......
  • POJ - 3296
    对于操作来说,第一次是最重要的,后来每次倒入水量是相同的。这是因为后面的总液体量不变的情况下,ans=第一次后液体浓度*后几次液体浓度的积所以由1/v^2<1/v^2-x^2(v,x>0),易得后几次水量相同那么,对于第一次来说可以用三分法来求极值。代码:#include<bits/stdc++.h>usingn......
  • POJ-1066
    题解告诉我:大意:在一个矩形区域内,有n条线段,线段的端点是在矩形边上的,有一个特殊点,问从这个点到矩形边的最少经过的线段条数最少的书目,穿越只能在中点穿越思路:需要巧妙的转换一下这个问题,因为从一个点到终点不可能“绕过”围墙,只能穿过去,所以门是否开在中点是无所谓的,只要求四周线......
  • DP优化——斜率优化
    引言在学数据结构优化dp,单调队列优化dp时都很快就懂了,四边形不等式优化dp看一看也懂了,只有斜率优化理解了一个月还不懂,最后在其他大佬和资料的帮助下成功学懂了,于是争取这篇题解在以后又不会的时候一遍就懂。前置数学知识1.一次函数初中数学知识,见八年级数学课本。2.凸包(......
  • 子比主题美化 – 自助售卡/发卡插件 源码 | WordPress插件,完美支持
    插件功能支持自由添加卡密支持查看卡密库存邮箱自动发送卡密信息后台卡密库存不足提醒如何使用:在后台新建一篇文章,然后选择自动售卡。设置相关价格(不支持将价格设置为0)。移动到已编辑文章的底部(添加密码信息)直接发布文章以显示文章销售卡。安装方法:在Wordpress后......
  • POJ - 3318
    他说:O(n^3)是过不了滴一搜……6代码和题解没有实质区别:#include<cstdio>#include<ctime>#include<cstdlib>usingnamespacestd;inta[505][505],b[505][505],c[505][505];intmain(){ srand(time(NULL)); intn; ios::sync_with_stdio(0); cin.tie(0); while(cin......
  • NOIP2024集训Day21 DP常见模型2 - 背包
    NOIP2024集训Day21DP常见模型2-背包A.[BZOJ4987]Tree树形背包dp先考虑几个显而易见的性质:选出的点一定是相邻的对于选出的点,如果从\(a_k\)再走回\(a_1\),那么就相当于每条边经过了两次由于题目没有包含\(dis(a_k,a_1)\),因此就相当于选出的点中的一条链可以只......
  • NOIP2024集训Day20 DP常见模型1 - 序列
    NOIP2024集训Day20DP常见模型1-序列A.[JOI2022Final]Let'sWintheElection贪心+DP。首先,一定是所有协作者同时在同一个州演讲,这样才最优。然后,假设我们已经知道所有州的方案(支持、支持+协作、反对),那我们一定是先按照从小到大的顺序拿下所有“支持+协作”州,这样最优。......
  • NOIP2024集训Day22 DP常见模型3 - 区间
    NOIP2024集训Day22DP常见模型3-区间A.[SCOI2003]字符串折叠因为前面折叠了会对后面产生影响,所以很显然不能贪心。考虑区间DP。定义\(f_{i,j}\)表示\(i\)到\(j\)范围内可以折叠到的最短长度。答案为\(f_{1,n}\)。状态转移:对于\(f_{i,j}\),使用区间DP惯用套路,枚......
  • [Typescript] TypeScript Project References
    Considerthis package.json file:{"name":"exercise","version":"1.0.0","main":"index.js","scripts":{"dev":"run-pdev:*","dev:client&qu......