首页 > 其他分享 >[题解][洛谷P1108] 低价购买

[题解][洛谷P1108] 低价购买

时间:2024-04-17 21:22:52浏览次数:26  
标签:洛谷 int 题解 个数 P1108 ans 序列 最长

题目描述

求最长下降子序列长度,以及最长下降子序列的个数。
(构成的序列一样的时候,视为同一种最长下降子序列)

题解

n不超过5000,n^2复杂度即可解决该问题。
主要在于如何统计最长下降子序列个数。
可以设数组t[i]表示以i为结尾的最长下降子序列个数,在更新f[i]的时候顺便更新。
t[i]=sum(t[j]),当且仅当 a[j] > a[i] 且 f[i] = f[j]+1 。

代码

#include<bits/stdc++.h>
#define  int  long long
using namespace std;
const int N=5007;
int a[N],f[N],t[N];
signed main(){
	int n;
	cin>>n;
	for(int i=1;i<=n;i++)cin>>a[i],t[i]=1,f[i]=1;
	for(int i=2;i<=n;i++){
		for(int j=1;j<i;j++){
			if(a[j]>a[i]){
				if(f[i]==f[j]+1)t[i]+=t[j];
				else if(f[i]<f[j]+1)f[i]=f[j]+1,t[i]=t[j];
			}
			if(a[j]==a[i])f[j]=t[j]=0;//注意这里的去重操作
		}
	}
	int ans=1,cnt=0;
	for(int i=1;i<=n;i++){
		if(f[i]>ans){
			ans=f[i];
			cnt=t[i];
		}
		else if(f[i]==ans)cnt+=t[i];
	}
	cout<<ans<<" "<<cnt<<endl;
}

标签:洛谷,int,题解,个数,P1108,ans,序列,最长
From: https://www.cnblogs.com/zwzww/p/18141795

相关文章

  • [ABC229E] Graph Destruction 题解
    [ABC229E]GraphDestruction题解思路解析题目要求删点,而众所周知删点的代价要大于加点的代价,于是我们考虑倒着处理询问,将每一个删点改成加点,而加点时就用并查集维护连通块即可。code#include<bits/stdc++.h>usingnamespacestd;constintN=2e5+10;intn,m,fa[N];......
  • P10342 [THUSC 2019] 数列 题解
    形式化题面:求\[\sum_{l=1}^{n}\sum_{r=l}^{n}\max_{i=l}^{r}(i-l+1)\timesf(i,r)\]其中\(f(l,r)\)为\(a_l,...,a_r\)中有多少个不同的数字。注意到,除了Sub2,其余数据点都有\(\maxf\le800\),这启发我们考虑\(O(nm)\)的算法。套路地,扫描线枚举右端点,则现在只需要考虑......
  • [ABC212E] Safety Journey 题解
    [ABC212E]SafetyJourney题解思路解析首先根据题目的条件我们可以想到dp,用\(f_{i,j}\)表示走了\(i\)步,现在在\(j\)的方案数,可见转移即是\(f_{i,u}\gets\sum{f_{i-1,v}}\),这里的\(v\)表示每个与\(u\)相连的点。可见如此做时间复杂度为\(O(kn(\frac{n(n-1)}{2}-m......
  • ICPC2023南京站题解(A C D F G I L M)
    本场金牌线为7题前一半。做出8题可稳金牌,这里是难度前8题的题解。ICPC2023南京站I:签到题。#include<bits/stdc++.h>#definelllonglong#defineQWQcout<<"QwQ"<<endl;#defineFOR()llle=e[u].size();for(lli=0;i<le;i++)usingnamespacestd;constllN=501010;......
  • [ABC208D] Shortest Path Queries 2 题解
    [ABC208D]ShortestPathQueries2题解思路解析此题的本质其实就是Floyd。我们在进行Floyd时会有一个\(k\)充当中间点,可见这里的\(k\)就等于题目当中的\(k\),因为小于等于\(k\)的所有点都被当作过中间点转移过,而大于\(k\)的所有点都没有被当作过中间点转移过,于是直......
  • P3978 [TJOI2015] 概率论 题解
    题意:求一棵\(n\)个节点的有根二叉树的叶子节点的期望个数。设\(f_n\)表示\(n\)个点的二叉树个数,\(g_n\)表示\(n\)个点的所有二叉树的叶子节点数之和。显然\(f_n\)为\(\text{Catalan}\)数,考虑如何求\(g_n\)。一个结论是:\(g_n=f_{n-1}\timesn\)。证明:对于每一......
  • [题解][2021-2022年度国际大学生程序设计竞赛第10届陕西省程序设计竞赛] Cute Rabbit
    题目描述有n只兔子,每个兔子上有一个数ai。要将所有兔子分为白色和绿色两堆,使所有白色兔子的数对绿色兔子取余结果相等。求绿色兔子的最大数量。题解考虑一种情况:把所有除了最小值的数都涂为绿色,此时显然满足条件。对于一般情况:可以枚举白绿兔子的分割线x。对于小于x,试将其全......
  • 前端项目安装node-sass依赖问题解决
    前端项目安装依赖node-sass问题解决记录:(项目中node版本14.16.0node-sass版本4.14.1)问题1:pnpnrunall:install后报错MSBUILD:errorMSB3428:解决方法:需要安装npminstall--globalwindows-build-tools1.1、npm全局安装windows-build-tools1.1安装过程中可能会出现......
  • [题解] [CCPC陕西省赛2022 H题] Cute Rabbit
    [CCPC陕西省赛2022H题]CuteRabbit题目描述有\(n\)只白色的兔子,把其中\(m\)只染成绿色。每只兔子上有一个数\(a_i\),如果所有白色兔子上的数对所有绿色兔子上的数两两取余的值均相同,则该种染色方式合法,求能够使染色合法的最大的\(m\)。输入格式第一行有一个整数\(n(......
  • uoj32 跳蚤公路题解
    题目链接点击打开链接题目解法首先问题等价于有一个负环可以到\(v\)假设环边的\(w\)之和为\(b\),\(c\)之和为\(k\),则这个环的长度就为\(kx+b\)如果是负环,需要满足\(kx+b<0\)钦定负环上的一个点\(st\),令\(f_{i,j}\)表示从\(st\)到\(i\)的路径中,\(\sumc=j\)的......