动态规划 求最长递减子序列
#include<iostream>
#include<stdio.h>
using namespace std;
int maxl[26];
int reco[26];
int main() {
int k,t;
int i, j;
int max = -1;
while (scanf("%d", &k) != EOF) {
for (i = 0; i < k; i++) {
cin >> t;
reco[i] = t;
maxl[i] = 1;
}
for (i = 1; i < k; i++) {
max = 0;
for (j = 0; j<i; j++) {
if (reco[j]>=reco[i]&&maxl[j] > max)
max = maxl[j];
}
maxl[i] += max;
}
max = -1;
for (i = 0; i < k; i++) {
if (maxl[i] > max)
max = maxl[i];
}
cout << max << endl;
}
}
设置数组a[i] 记录到I为止的最长序列个数
更新时 选出在I前面、reco[j]>=reco[i]、a[j]的最大值max,a[i]+=max;
找出a[i]中的最大值即可