本题采用动态规划
2024-03-21 15:55:50
发布于:浙江
148阅读
0回复
0点赞
本题采用动态规划 。
数据储存,设定数组a[]用于存储数字序列 ,设定dp[]数组用于统计上升的序列个数;
遍历组数a[],在遍历的过程中如果出现了数字上升的情况,就使用动态规划累计当前的最优解;
动态转移方程为 ,dp[i] = max(dp[i],dp[j]+1);
最后,遍历数组dp[] , 找出dp[]数组中的最大值。
#include <bits/stdc++.h>
using namespace std;
const int N = 1010;
int a[N], dp[N];
int n;
int ans;
int main(){
cin >> n;
for (int i=1; i<=n; i++) {
cin >> a[i];
dp[i] = 1;
for (int j=1; j<i; j++) {
if (a[j] < a[i]) {
dp[i] = max(dp[i], dp[j] + 1);
}
ans = max(ans, dp[i]);
}
}
cout << ans << endl;
return 0;
}
这里空空如也
有帮助,赞一个