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

P1091 [NOIP 2004 提高组] 合唱队形

题目链接:

思路:

题目意思,找出最少的同学出列,保证学生 1-t 上升, t-n 下降。我们只要求出每个点的最长上升子序列和最长不上升子序列,然后总人数-最长上升子序列和最长不上升子序列+1,就是最少同学出列。

代码:

#include<bits/stdc++.h>
#define int long long 
using namespace std;
const int N = 110;

int n, arr[N];
int dp[N], g[N];

signed main(){
    cin >> n;
    for(int i =1; i <= n; i++) cin >> arr[i];
    
    //上升
    for(int i = 1; i <= n; i++){
        dp[i] = 1;
        for(int j = 1;  j< i; j++){
            if(arr[j] < arr[i]){
                dp[i] = max(dp[i], dp[j]+1);
            }
        }
    }
    //下降
    for(int i = n; i >=1; i--){
        g[i] = 1;
        for(int j =n; j > i; j--){
            if(arr[j] < arr[i]){
                g[i] = max(g[i], g[j]+1);
            }
        }
    }
    
    //找到最长上升子序列和最长不上升子序列数量
    int ans = 0;
    for(int i =1; i <= n; i++){
        ans = max(ans, g[i]+dp[i]);
    }
    
    
    cout << n - ans +1<< endl;
    return 0;
}


http://www.kler.cn/a/624548.html

相关文章:

  • 科大讯飞语音转文字STT--unity
  • 蓝桥杯备赛:求圆的面积
  • 如何备份你的 Postman 所有 Collection?
  • HTML5和CSS3的一些特性
  • 简易指南“<em >快</em><em>3</em><em>倍</em><em>投</em><em>规</em><em>划
  • QtAV入门
  • 我的世界1.20.1forge进阶模组开发教程——生物群系(2)
  • 创作领域“<em >彩</em><em>票</em><em>导</em><em>师</em><em>带</em><em>玩</em><em>群
  • QtAdvancedStylesheets使用
  • jarvisoj API调用 [JSON格式变XXE]
  • 什么是 JavaScript 中的原型链(Prototype Chain)?
  • yum install 报错(CentOS换源):
  • 05-02-自考数据结构(20331)- 动态查找-知识点
  • 赛逸展2025年重磅回归,科技盛宴再启新篇
  • 计算机求职面试中高频出现的经典题目分类整理
  • Canvas实现旋转太极八卦图
  • S32K144的SDK库中两种时钟初始化的区别(一)
  • 注意力蒸馏技术
  • 数据结构--二叉树--其一
  • 五重涅槃·量子篇:混沌工程破虚空,九阳真火铸金身