首页 > 其他分享 >P1091 合唱队形题解(普及/提高−) 题解

P1091 合唱队形题解(普及/提高−) 题解

时间:2023-11-25 22:14:52浏览次数:37  
标签:合唱队 int 题解 sum P1091 序列 105

题目传送门

这道题是一个很经典的动态规划。

因为合唱队形的身高是从低——高——低来排的,所以就可以利用分治的思想将队形分成两个部分:低——高是最长上升子序列;高——低是最长下降子序列。

这道题其实可以用二分查找来优化,可是这题n≤100,没有必要优化,需优化题详见P1020 导弹拦截

做法详见代码

#include <bits/stdc++.h>
using namespace std;
int n,h[105],dp1[105],dp2[105],daan[105],sum=-1;//dp[i]是指以第i个数为结尾的最长上升子序列
int main()
{
	cin>>n;
	for(int i=1;i<=n;i++)
	{
		cin>>h[i];//输入
	}
	for(int i=1;i<=n;i++)
	{
		dp1[i]=dp2[i]=1;//将dp1和dp2数组初始化为1 
	}
	for(int i=1;i<=n;i++)
	{
		for(int j=1;j<i;j++)
		{
			if(h[i]>h[j] and dp1[i]<=dp1[j]+1)
			{
				dp1[i]=dp1[j]+1;//先从低到高的过一遍 
			 } 
		}
	}
	for(int i=n;i>1;i--)
	{
		for(int j=i+1;j<=n;j++)
		{
			if(h[i]>h[j] and dp2[i]<=dp2[j]+1)
			{
				dp2[i]=dp2[j]+1;//再从高到低的过一遍 
			 } 
		}
	}
	for(int i=1;i<=n;i++)
	{
		daan[i]=dp1[i]+dp2[i]-1;//重要的事情说三遍,因为dp1和dp2都把最中间的数算了一遍,所以要-1,-1,-1 
		if(daan[i]>sum)
		{
			sum=daan[i];//求答案中最大的  
		}
	}
	cout<<n-sum;//因为sum是最多剩下多少同学,所以要用n-sum 
	return 0;
}

建议大家去做一下P1077 摆花

标签:合唱队,int,题解,sum,P1091,序列,105
From: https://www.cnblogs.com/BadBadBad/p/P1091.html

相关文章

  • P3370 【模板】字符串哈希(普及−) 题解
    题目链接题目大意如题,给定\(N\)个字符串(第\(i\)个字符串长度为\(M_i\),字符串内包含数字、大小写字母,大小写敏感),请求出\(N\)个字符串中共有多少个不同的字符串。不知道大家知不知道一个字符串函数,叫\(insert\)他是\(STL\)库中的一个函数,作用是将两个字符串拼接起来,我......
  • P5867 [SEERC2018] Fishermen(暂无评定) 题解
    题意有\(n\)条鱼,\(m\)个渔夫,且这\(m\)个渔夫都在横坐标轴上,每个渔夫都有一个长度为\(l\)的鱼竿,当鱼和渔夫距离小于或等于\(l\)时,鱼能被钓到。并且渔夫\((x,0)\)与鱼\((a,b)\)的距离(假设为\(L\))满足如下公式\(|a−x|+b\)式子中\(x\)为渔夫的横坐标,\((a,b)......
  • AT_pakencamp_2020_day1_f Fibonaccyan(暂无评定) 题解
    题目链接题目大意:给定数\(P\),寻找能把\(P\)整除的最小的斐波那契数,然后输出它是斐波那契数列中的第几个,找不到输出的话就输出-1。分析:主要代码:a[i]=(a[i-1]+a[i-2])%p思路:先将\(a\)数组的第一项和第二项都初始化为1,然后判断是不是能整除\(p\)就行了Code:#incl......
  • P1029 最大公约数和最小公倍数问题(普及−) 题解
    题目传送门想要做这题,我们要先了解一下最大公约数。最大公因数,也称最大公约数、最大公因子,指两个或多个整数共有约数中最大的一个。a,b的最大公约数记为(a,b),同样的,a,b,c的最大公约数记为(a,b,c),多个整数的最大公约数也有同样的记号。求最大公约数有多种方法,常见的有质因数分解法、短......
  • Win10无法访问linux上的samba服务问题解决
    转自https://blog.csdn.net/u014635079/article/details/124703840服务端:Ubuntu20.04, samba版本4.13.17-Ubuntu客户端:Win10 问题1:按照教程搭建好samba服务之后,从windows可以ping通linux的情况下,从windows端无法连接samba服务器。 解决:通过打开Lanman工作站的启用不......
  • P8543 「Wdoi-2」纯粹的复仇女神 题解
    自己的套路还是见少了。思路考虑扫描线。每一个颜色的\(\min\)具有单调性,这个很好看出来。可以使用一个单调栈来维护。这里都是朴素的。考虑如何维护。我们发现在通过单调栈维护的时候。需要支持撤销上一个元素对区间的影响。我就在这里卡了很久。我们有一个很暴力的......
  • 14:苏格拉底问答、实践过程截图、遇到问题解决问题截图,代码链接、
    ......
  • 苏格拉底问答、实践过程截图、遇到问题解决问题截图,代码链接
    include<stdio.h>include<stdlib.h>include<sys/types.h>include<sys/socket.h>include<netinet/in.h>include<arpa/inet.h>include<time.h>include<string.h>include<unistd.h>defineMAXLINE256......
  • 两道题解决滑动窗口问题
    定长567.字符串的排列-力扣(LeetCode)给你两个字符串 s1 和 s2 ,写一个函数来判断 s2 是否包含 s1 的排列。如果是,返回 true ;否则,返回 false 。换句话说,s1 的排列之一是 s2 的 子串 。解题思路1°传统套路就是定义两个哈希表,一个存储s1中每个字符的出现次数,记s1......
  • P1002题解
    思路设\(dp_{i,j}\)表示第\(i\)行\(j\)列卒走到这里有多少种方式。卒是可以向右和下走,所以到这个点只能从左或上来,不难得出转移公式:\(dp_{i,j}=dp_{i-1,j}+dp_{i,j-1}\)。如果马在这个点上或者说马能到这个点上,那么卒不能到这个点,也就是卒到这个点的方式为\(0\)。如......