算法:合唱队形(最大上升子序列,线性DP)
最大上升子序列
有一个队列,下标从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)相关推荐
- UOJ #214 合唱队形 (概率期望计数、DP、Min-Max容斥)
UOJ #214 合唱队形 (概率期望计数.DP.Min-Max容斥) 9个月的心头大恨终于切掉了!!!! 非常好的一道题,不知为何uoj上被点了70个差评. 题目链接: http://uoj.ac/ ...
- UOJ #214 [UNR #1]合唱队形 (概率期望计数、DP、Min-Max容斥)
9个月的心头大恨终于切掉了!!!! 非常好的一道题,不知为何uoj上被点了70个差评. 题目链接: http://uoj.ac/problem/214 题目大意: 请自行阅读. 题解: 官方题解讲得相 ...
- 【动态规划刷题笔记】线性dp:合唱队形(最长递增子序列的变体)
[NOIP2004 提高组] 合唱队形 - 洛谷 思路:最少出列,即挑出最多,即找最长递增子序列和最长递减子序列 设dp1[i]为以h[i]结尾的最长递增子序列 dp2[i]为以h[i]开头的最长递减 ...
- 算法模板:动态规划之线性DP【沈七】
算法模板:动态规划之线性DP 前言 线性DP 数字三角形模型 摘花生 最小路径和 不同路径模型 不同路径(有障碍) 过河卒 (综合应用) 最长上升子序列模型 木棍加工 导弹拦截 完结散花 参考文献 前 ...
- P1091 合唱队形[单调性+DP]
题目来源:洛谷 题目描述 N位同学站成一排,音乐老师要请其中的(N−K)位同学出列,使得剩下的K位同学排成合唱队形. 合唱队形是指这样的一种队形:设K位同学从左到右依次编号为1,2,-,K,他们的身高 ...
- 【DP】合唱队形(jzoj 1122)
合唱队形 jzoj 1122 题目大意: 有n个人,按一定的顺序站成一排,最少减去多少个人可以使队列以一个人为中心,两边分别递减 输入样例 8 186 186 150 200 160 130 197 ...
- 【OpenJ_Bailian - 2711 】 合唱队形(dp,枚举中间顶点)
题干: N位同学站成一排,音乐老师要请其中的(N-K)位同学出列,使得剩下的K位同学不交换位置就能排成合唱队形. 合唱队形是指这样的一种队形:设K位同学从左到右依次编号为1, 2, -, K,他们的 ...
- DP算法-背包问题与线性DP问题(Acwing)
目录 一.何为DP 二.背包问题 1.01背包问题 2.完全背包问题 3.多重背包问题 三.线性DP问题(典型例题与总结) 1.数字三角形问题 2.最长上升子序列 3.最长上升子序列Ⅱ 4.最长公共子 ...
- tyvj 1067 合唱队形 dp LIS
P1067 合唱队形 时间: 1000ms / 空间: 131072KiB / Java类名: Main 背景 NOIP2004 提高组 第三道 描述 N位同学站成一排,音乐老师要请其中的(N-K)位 ...
- 题目1131:合唱队形(最长递增子序列进阶)
题目链接:http://ac.jobdu.com/problem.php?pid=1131 详解链接:https://github.com/zpfbuaa/JobduInCPlusPlus 参考代码: ...
最新文章
- 分页符与分节符的区别
- Oracle DBWR,LGWR,CKPT,ARCH 触发条件 总结
- Python入门100题 | 第055题
- 详解联邦学习Federated Learning
- 中蜂几月份自然分蜂_蜜蜂的种类:北黑蜂,中华蜜蜂,皖南中蜂,贵州纳雍中蜂等等...
- 重庆自考学历计算机应用基础考试,2017年自考计算机应用基础模拟试题1
- oracle 登录dba,在Oracle10gisqlplus下登录dba用户
- atitit 数字音频技术概论 艾提拉著 目录 1. 声学基础	2 1.1. 1.2人耳的听觉效应9	2 2. 第1章数字音频基础	2 2.1. 1.1音频的发展历史	2 2.2. 1.2音频的发展
- J2EE开发系列视频教程
- 酒店管理系统java代码_基于Spring开发的Java酒店管理系统 源码下载
- 叶俊——“新零售·新未来”米友圈第九届全国精英总裁班授课圆满落幕
- js定义函数的两种形式及区别
- 神犇营-my1002-朋友圈集赞
- 计算机基础原理知识,科普下计算机基础原理知识
- 防火墙和系统安全防护
- java70-GUL图形用户界面初识
- 智能家居中物联网技术的应用
- 概念肆虐:凭什么让“IPv9”横行无忌?
- session在html页面跳转,session跨页面传值为空
- jemalloc C++实践