走梅花桩—ACM

题目描述

题目描述 

   Redraiment是走梅花桩的高手。Redraiment总是起点不限,从前到后,往高的桩子走,但走的步数最多,不知道为什么?你能替Redraiment研究他最多走的步数吗? 

样例输入

6

2 5 1 5 4 5

样例输出

3

提示

Example: 
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。

 

输入描述:

输入多行,先输入数组的个数,再输入相应个数的整数

输出描述:

输出结果

示例1

输入

6
2
5
1
5
4
5

 

输出

3

算法实现 

#include <iostream>
#include <vector>
using namespace std;
//动态规划
int main() 
{
	int N;
	while (std::cin >> N)
	{
		std::vector<int> Data(N, 0);    // 存放桩高度数据
		std::vector<int> Step(N, 1);	// 每个位置的置对应存放第一个桩和当前桩的最大步数
		int ret = 0;// 最大步数
		for (int i = 0; i < N; ++i)
		{
			std::cin >> Data[i];        // 输入数据
			for (int j = 0;j < i;++ j)	// 每次加一根i,与前面的木桩动态比较(当前桩i的数据根据之前的桩j数据得出(和后续的无关))
			{
				if (Data[i] > Data[j] && Step[i] < Step[j] + 1)	// 当前桩i的高度大于之前的某个桩j时 且 可以多走一步
				{
					Step[i] = Step[j] + 1;
				}
			}
			ret = (ret > Step[i]) ? ret : Step[i];// 从每个桩的最大步数中选出最大值
		}
		std::cout << ret << std::endl;
	}
	return 0;
}
  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值