本文主要是介绍16.3 线性DP练习(最长递增子序列)——【蓝桥骑士】,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!
文章目录
- 题目描述
- 输入描述
- 输出描述
- 输入输出样例
- 最终代码c/c++
- 过程理解
题目描述
小明是蓝桥王国的骑士,他喜欢不断突破自我。
这天蓝桥国王给他安排了N个对手,他们的战力值分别为a1,a2,…,an,且按顺序阻挡在小明的前方。对于这些对手小明可以选择挑战,也可以选择避战。
身为高傲的骑士,小明从不走回头路,且只愿意挑战战力值越来越高的对手。(意思是:找出一个最长的递增个数)
请你算算小明最多会挑战多少名对手。
输入描述
输出描述
输出一行整数表示答案。
输入输出样例
输入:
6
1 4 2 2 5 6
输出:
4
最终代码c/c++
#include<bits/stdc++.h>
using namespace std;
const int N = 10001;
int a[N],dp[N];int main()
{int n; cin >> n;for(int i=1; i<=n; i++) cin >> a[i];int ans = 1;dp[1] = 1;for(int i = 2; i <= n; i++){//-----执行的是:dp[i]=max(dp[j]+1) 其中:0<j<i , Aj<Ai----------------------------- int max = 0;for(int j=1; j<i; j++)if(dp[j] > max && a[j] < a[i])max = dp[j];dp[i] = max+1;//---------------------------------- if(dp[i] > ans) ans = dp[i];}cout << ans << endl;return 0;
}
过程理解
这篇关于16.3 线性DP练习(最长递增子序列)——【蓝桥骑士】的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!