文章

19

粉丝

67

获赞

29

访问

12.1k

头像
使用哈希表即可,严格意义上也不算dp算法
P897 上海交通大学2021年机试题
发布于2023年8月12日 09:38
阅读数 648

使用一张哈希表unordered_map存储下标为i的元素是连续递增子序列中的第几个元素,即当前子序列的长度。

需要使用到动态规划的经典例题是最长递增子序列,由于在此题中加入了连续的要求,因此不需要回溯,将数组中的每个元素都当作连续递增序列的开始元素即可,同时继承上一个元素的长度再加一更新子序列长度。

#include <bits/stdc++.h>

int main()
{
	int n;
	std::cin >> n;

	std::vector<int> num(n);
	std::unordered_map<int, int> lenOfSeq(n);
	int maxLen = 1;

	for (int i = 0; i < n; i++)
	{
		std::cin >> num[i];
		lenOfSeq[i] = 1; // 带上本身,至少为1
		if (i >= 1)
		{
			if (num[i] > num[i - 1])
			{
				lenOfSeq[i] = lenOfSeq[i - 1] + 1;
			}
			maxLen = std::max(maxLen, lenOfSeq[i]);
		}
	}

	std::cout << maxLen;

	return 0;
}
登录查看完整内容


登录后发布评论

暂无评论,来抢沙发