华为oj 刷题记录之合唱团
华为OJ-合唱队
描述
计算最少出列多少位同学,使得剩下的同学排成合唱队形
说明:
N位同学站成一排,音乐老师要请其中的(N-K)位同学出列,使得剩下的K位同学排成合唱队形。
合唱队形是指这样的一种队形:设K位同学从左到右依次编号为1,2…,K,他们的身高分别为T1,T2,…,TK, 则他们的身高满足存在i(1<=i<=K)使得
Ti < T2 < ...< Ti-1 < Ti > Ti+1>...>TK
你的任务是,已知所有N位同学的身高,计算最少需要几位同学出列,可以使得剩下的同学排成合唱队形。
知识点
循环
运行时间限制
0M
内存限制
0
输入
整数N
一行整数,空格隔开,N位同学身高
输出
最少需要几位同学出列
样例输入
8 186 186 150 200 160 130 197 200
样例输出
4
楼下的代码重点在于维护了两个数组,res_up【i】保存了序列arr[0]到arr[i]的并且含有arr[i]最长升序的长度 res_down[i]则是从后面向前数的,于是num就表示合唱团包含 i 这个下标参加合唱的人数 OK 差不多就是这样
重点在代码
// 合唱队.cpp
#include "stdafx.h"//vs的头文件
#include <iostream>
using namespace std;
int getSubseq_up(int,int [],int *);
int getSubseq_down(int,int [],int *);
int main()
{
int len;
int tmp = 0;
int arr[500];
cin >> len;
for (int i = 0;i < len;i++) {
cin >> arr[i];
}
int res_up[500];
int res_down[500];
getSubseq_up(len, arr, res_up);
getSubseq_down(len,arr,res_down);
//需要知道包含i但不大于i的最长子序列的长度
for (int i = 0;i < len;i++) {
int num = res_up[i] + res_down[i]-1;
if (num > tmp)
tmp = num;
}
cout << len - tmp << endl;
return 0;
}
int getSubseq_up(int len, int arr[],int res[]) {/*这里应用到动态规划的思想(ps 算法导论上面提到dp的p是指表格法,这里确实)
for (int j = 0;j < len;j++) {
res[j] = 1;
for (int k = 0;k < j;k++) {
if (arr[j] > arr[k] && res[j] < (res[k] + 1)) {
res[j] = res[k] + 1;
}
}
}
return 0;
}
int getSubseq_down(int len, int arr[], int res[]) {
for (int j = len-1;j >= 0;j--) {
res[j] = 1;
for (int k = len-1;k > j;k--) {
if (arr[j] > arr[k] && res[j] < (res[k] + 1)) {
res[j] = res[k] + 1;
}
}
}
return 0;
}
#include <iostream> using namespace std;
int getSubseq_up(int,int [],int *);
int getSubseq_down(int,int [],int *);
int main()
{
int len;
int tmp = 0;
int arr[500];
cin >> len;
for (int i = 0;i < len;i++) {
cin >> arr[i];
}
int res_up[500];
int res_down[500];
getSubseq_up(len, arr, res_up);
getSubseq_down(len,arr,res_down);
//需要知道包含i但不大于i的最长子序列的长度
for (int i = 0;i < len;i++) {
int num = res_up[i] + res_down[i]-1;
if (num > tmp)
tmp = num;
}
cout << len - tmp << endl;
return 0;
}
int getSubseq_up(int len, int arr[],int res[]) {/*这里应用到动态规划的思想(ps 算法导论上面提到dp的p是指表格法,这里确实)
for (int j = 0;j < len;j++) {
res[j] = 1;
for (int k = 0;k < j;k++) {
if (arr[j] > arr[k] && res[j] < (res[k] + 1)) {
res[j] = res[k] + 1;
}
}
}
return 0;
}
int getSubseq_down(int len, int arr[], int res[]) {
for (int j = len-1;j >= 0;j--) {
res[j] = 1;
for (int k = len-1;k > j;k--) {
if (arr[j] > arr[k] && res[j] < (res[k] + 1)) {
res[j] = res[k] + 1;
}
}
}
return 0;
}
代码参考了http://blog.csdn.net/xiaoski/article/details/47161009 毕竟新人给自己一点时间
华为oj 刷题记录之合唱团的更多相关文章
- AC 自动机刷题记录
目录 简介 第一题 第二题 第三题 第四题 第五题 第六题 简介 这就是用来记录我对于<信息学奥赛一本通 · 提高篇>一书中的习题的刷题记录以及学习笔记. 一般分专题来写(全部写一起可能要 ...
- PE刷题记录
PE刷题记录 PE60 / 20%dif 这道题比较坑爹. 所有可以相连的素数可以构成一张图,建出这张图,在其中找它的大小为5的团.注意上界的估算,大概在1W以内.1W内有1229个素数,处理出这些素 ...
- Sublime Text3 配置C++(附oj刷题常用模板)
# 下载对应平台的sublime sublime最新版下载, 字体样式个人喜欢Consolas, 另附注册码: -– BEGIN LICENSE -– TwitterInc 200 User Lice ...
- leetcode刷题记录--js
leetcode刷题记录 两数之和 给定一个整数数组 nums 和一个目标值 target,请你在该数组中找出和为目标值的那 两个 整数,并返回他们的数组下标. 你可以假设每种输入只会对应一个答案.但 ...
- Leetcode刷题记录(python3)
Leetcode刷题记录(python3) 顺序刷题 1~5 ---1.两数之和 ---2.两数相加 ---3. 无重复字符的最长子串 ---4.寻找两个有序数组的中位数 ---5.最长回文子串 6- ...
- 刷题记录:[HarekazeCTF2019]encode_and_encode
目录 刷题记录:[HarekazeCTF2019]encode_and_encode 一.知识点 JSON转义字符绕过 php伪协议 刷题记录:[HarekazeCTF2019]encode_and_ ...
- 刷题记录:[De1CTF 2019]Giftbox && Comment
目录 刷题记录:[De1CTF 2019]Giftbox && Comment 一.知识点 1.sql注入 && totp 2.RCE 3.源码泄露 4.敏感文件读取 ...
- 刷题记录:[强网杯 2019]Upload
目录 刷题记录:[强网杯 2019]Upload 一.知识点 1.源码泄露 2.php反序列化 刷题记录:[强网杯 2019]Upload 题目复现链接:https://buuoj.cn/challe ...
- 刷题记录:[XNUCA2019Qualifier]EasyPHP
目录 刷题记录:[XNUCA2019Qualifier]EasyPHP 解法一 1.error_log结合log_errors自定义错误日志 2.include_path设置包含路径 3.php_va ...
随机推荐
- iOS推送小结(证书的生成、客户端的开发、服务端的开发)
1.推送过程简介 1.1.App启动过程中,使用UIApplication::registerForRemoteNotificationTypes函数与苹果的APNS服务器通信,发出注册远程推送的申请 ...
- java回调机制
http://www.cnblogs.com/heshuchao/p/5376298.html
- zookeeper3.3.6 伪分布式安装
下载地址(http://zookeeper.apache.org/releases.html#download) 一:下载zookeeper的安装包,解压,进入到zk的目录文件,进入conf目录 ...
- JAVA中MAP值保持顺序不变
今天在进行JAVA开发过程中,因需要使用MAP来存放数据,同时希望MAP中KEY的顺序与放入顺序保持一致. 在使用HashMap之后,发现KEY的顺序是乱序的,每次打印还不太一样.上网查询资料之后发现 ...
- sublime Text 3 安装emmet
Emmet简介 Emmet是一个支持大部分流行文本编辑器的插件,能够极大得提高编写HTML和CSS的工作效率. 官网:http://emmet.io/ 在Sublime Text 3中安装 前提Sub ...
- Beginning Scala study note(7) Trait
A trait provides code reusability in Scala by encapsulating method and state and then offing possibi ...
- 解决scrollview和viewpager冲突
import android.content.Context; import android.util.AttributeSet; import android.view.MotionEvent; i ...
- CC2530使用串口下载(SBL)
工作环境: WIN7 64位 IAR 版本: 8.10.3 (8.10.3.10338) ZStack-CC2530-2.3.1-1.4.0协议栈,下载地址:http://download.csdn. ...
- 一场IT民工 与 人贩子 之间的战争 - 感受来自PostgreSQL的爱
标签 PostgreSQL , 图数据库 , 社会关系分析 , 流式分析 , 人贩子 , 图像识别 , 人脸识别 , 公安刑侦 , pipelinedb , stream , neo4j , plpr ...
- 安卓开发error opening trace file: No such file or directory (2)报错原因
error opening trace file: No such file or directory (2) 这个问题的出现是因为运行的测试机android系统版本和项目api不一致导致. 改成一样 ...