最大上升子序列

有一个队列,下标从1开始存储。用f[i]代表i点结尾的最大上升子序列的长度。

采用递归的思想,从队的最左边开始,由于自身,所以以最左边一点结尾的最大上升子序列为1,故f[1] = 1。以第二点结尾的最大上升子序列当w[1] < w[2]时,f[2] = max(f[2], f[1] + 1)。f[1] + 1 代表的是以1结尾的最大上升子序列加上当前这个点。
一般地,f[i] = max(f[i], f[j] + 1)

    for (int i = 1; i <= n; i ++ ){f[i] = 1;for (int j = 1; j < i; j ++ )if (w[j] < w[i])f[i] = max(f[i], f[j] + 1);}

问题描述

N位同学站成一排,音乐老师要请其中的(N-K)位同学出列,使得剩下的K位同学排成合唱队形。

合唱队形是指这样的一种队形:设K位同学从左到右依次编号为1,2…,K,他们的身高分别为T1,T2,…,TK,  则他们的身高满足T1<…Ti+1>…>TK(1≤i≤K)。

你的任务是,已知所有N位同学的身高,计算最少需要几位同学出列,可以使得剩下的同学排成合唱队形。

输入格式

输入的第一行是一个整数N,表示同学的总数。

第二行有n个整数,用空格分隔,第i个整数Ti是第i位同学的身高(厘米)。

输出格式

输出包括一行,这一行只包含一个整数,就是最少需要几位同学出列。

数据范围

2≤N≤100,
130≤Ti≤230

输入样例:

8
186 186 150 200 160 130 197 220

输出样例:

4

代码

#include<iostream>
using namespace std;
int w[110];
int f[110], g[110];
int main(){int n;cin >> n;for(int i = 1; i <= n; ++i){cin >> w[i];    }for(int i = 1; i <= n; ++i){f[i] = 1;for(int j = 0; j < i; ++j){if(w[j] < w[i])f[i] = max(f[i], f[j] + 1);}}for(int i = n; i; i--){g[i] = 1;for(int j = n; j > i; --j){if(w[j] < w[i]){g[i] = max(g[i], g[j] + 1);}}}int res = 0;for(int i = 1; i <= n; ++i){res = max(res, g[i] + f[i] - 1);}cout << n - res << endl;return 0;
}

原题链接

算法:合唱队形(最大上升子序列,线性DP)相关推荐

  1. UOJ #214 合唱队形 (概率期望计数、DP、Min-Max容斥)

    UOJ #214 合唱队形 (概率期望计数.DP.Min-Max容斥) 9个月的心头大恨终于切掉了!!!! 非常好的一道题,不知为何uoj上被点了70个差评. 题目链接: http://uoj.ac/ ...

  2. UOJ #214 [UNR #1]合唱队形 (概率期望计数、DP、Min-Max容斥)

    9个月的心头大恨终于切掉了!!!! 非常好的一道题,不知为何uoj上被点了70个差评. 题目链接: http://uoj.ac/problem/214 题目大意: 请自行阅读. 题解: 官方题解讲得相 ...

  3. 【动态规划刷题笔记】线性dp:合唱队形(最长递增子序列的变体)

    [NOIP2004 提高组] 合唱队形 - 洛谷 思路:最少出列,即挑出最多,即找最长递增子序列和最长递减子序列 设dp1[i]为以h[i]结尾的最长递增子序列 dp2[i]为以h[i]开头的最长递减 ...

  4. 算法模板:动态规划之线性DP【沈七】

    算法模板:动态规划之线性DP 前言 线性DP 数字三角形模型 摘花生 最小路径和 不同路径模型 不同路径(有障碍) 过河卒 (综合应用) 最长上升子序列模型 木棍加工 导弹拦截 完结散花 参考文献 前 ...

  5. P1091 合唱队形[单调性+DP]

    题目来源:洛谷 题目描述 N位同学站成一排,音乐老师要请其中的(N−K)位同学出列,使得剩下的K位同学排成合唱队形. 合唱队形是指这样的一种队形:设K位同学从左到右依次编号为1,2,-,K,他们的身高 ...

  6. 【DP】合唱队形(jzoj 1122)

    合唱队形 jzoj 1122 题目大意: 有n个人,按一定的顺序站成一排,最少减去多少个人可以使队列以一个人为中心,两边分别递减 输入样例 8 186 186 150 200 160 130 197 ...

  7. 【OpenJ_Bailian - 2711 】 合唱队形(dp,枚举中间顶点)

    题干: N位同学站成一排,音乐老师要请其中的(N-K)位同学出列,使得剩下的K位同学不交换位置就能排成合唱队形.  合唱队形是指这样的一种队形:设K位同学从左到右依次编号为1, 2, -, K,他们的 ...

  8. DP算法-背包问题与线性DP问题(Acwing)

    目录 一.何为DP 二.背包问题 1.01背包问题 2.完全背包问题 3.多重背包问题 三.线性DP问题(典型例题与总结) 1.数字三角形问题 2.最长上升子序列 3.最长上升子序列Ⅱ 4.最长公共子 ...

  9. tyvj 1067 合唱队形 dp LIS

    P1067 合唱队形 时间: 1000ms / 空间: 131072KiB / Java类名: Main 背景 NOIP2004 提高组 第三道 描述 N位同学站成一排,音乐老师要请其中的(N-K)位 ...

  10. 题目1131:合唱队形(最长递增子序列进阶)

    题目链接:http://ac.jobdu.com/problem.php?pid=1131 详解链接:https://github.com/zpfbuaa/JobduInCPlusPlus 参考代码: ...

最新文章

  1. 分页符与分节符的区别
  2. Oracle DBWR,LGWR,CKPT,ARCH 触发条件 总结
  3. Python入门100题 | 第055题
  4. 详解联邦学习Federated Learning
  5. 中蜂几月份自然分蜂_蜜蜂的种类:北黑蜂,中华蜜蜂,皖南中蜂,贵州纳雍中蜂等等...
  6. 重庆自考学历计算机应用基础考试,2017年自考计算机应用基础模拟试题1
  7. oracle 登录dba,在Oracle10gisqlplus下登录dba用户
  8. atitit 数字音频技术概论 艾提拉著 目录 1. 声学基础 2 1.1. 1.2人耳的听觉效应9 2 2. 第1章数字音频基础 2 2.1. 1.1音频的发展历史 2 2.2. 1.2音频的发展
  9. J2EE开发系列视频教程
  10. 酒店管理系统java代码_基于Spring开发的Java酒店管理系统 源码下载
  11. 叶俊——“新零售·新未来”米友圈第九届全国精英总裁班授课圆满落幕
  12. js定义函数的两种形式及区别
  13. 神犇营-my1002-朋友圈集赞
  14. 计算机基础原理知识,科普下计算机基础原理知识
  15. 防火墙和系统安全防护
  16. java70-GUL图形用户界面初识
  17. 智能家居中物联网技术的应用
  18. 概念肆虐:凭什么让“IPv9”横行无忌?
  19. session在html页面跳转,session跨页面传值为空
  20. jemalloc C++实践

热门文章

  1. 链新:探索NFT中国化路径,与实体经济相结合
  2. SpringBoot线程池实现200w数据快速落库
  3. CSU 1256 天朝的单行道
  4. DJ8-2 主存储器的组织
  5. 【密码学】七、密钥管理
  6. 战国七雄中最强大的国家(除秦外)——赵国_我是亲民_新浪博客
  7. 数字孪生助力智慧城市智能化发展
  8. 淘客基地教你如何推广淘客小程序
  9. windows下Git连接使用
  10. 力扣887题-鸡蛋掉落