Redraiment的走法
算法知识视频讲解
中等 通过率:25.60% 时间限制:1秒 空间限制:32M
知识点
排序
题目
题解(22)
讨论(186)
排行
warning 校招时部分企业笔试将禁止编程题跳出页面,为提前适应,练习时请使用在线自测,而非本地IDE。
描述
Redraiment是走梅花桩的高手。Redraiment可以选择任意一个起点,从前到后,但只能从低处往高处的桩子走。他希望走的步数最多,你能替Redraiment研究他最多走的步数吗?
本题含有多组样例输入
输入描述:
输入多组数据,1组有2行,第1行先输入数组的个数,第2行再输入梅花桩的高度
输出描述:
一组输出一个结果
示例1
输入:
6
2 5 1 5 4 5
3
3 2 1
复制
输出:
3
1
复制
说明:
6个点的高度各为 2 5 1 5 4 5
如从第1格开始走,最多为3步, 2 4 5
从第2格开始走,最多只有1步,5
而从第3格开始走最多有3步,1 4 5
从第5格开始走最多有2步,4 5
所以这个结果是3。
#include <iostream>
#include <vector>
using namespace std;
/*
* 思路:将数组的值进行冒泡比较,依次将较大的值存储vecOut数组
* 步骤:
* 第一步:输入数组个数n和值inputVec;
* 第二步:进行冒泡排序,第一个值大于后面所有值,则输出个数为1;
* 如果第一个值小于第二个值,则输出个数加1;第二个数小于第三个数,则继续加1
*/
void increaseVec(vector<int> inputVec)
{
int inputVecLen = inputVec.size();
//vector<int> outputVec(inputVecLen,1);
vector<int> outputVec;
int k = 1;
for(int i = 0;i < inputVecLen; i++)
{
outputVec.push_back(1);
for(int j = 0;j < i; j++)
{
if(inputVec[j] < inputVec[i])
{
outputVec[i] = max(outputVec[i], outputVec[j]+1);
if(outputVec[i] > k) {
k = outputVec[i];
}
}
}
}
cout<<k<<endl;
}
int main()
{
int n;
while(cin>>n) {
vector<int> vec;
for(int i = 0; i < n; i++) {
int temp;
cin>>temp;
vec.push_back(temp);
}
increaseVec(vec);
}
} 
京公网安备 11010502036488号