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); } }