HRBUST 2010简单dp+最长递减子序列
Posted tennant
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了HRBUST 2010简单dp+最长递减子序列相关的知识,希望对你有一定的参考价值。
题目:所谓二等队形就是从大到小依次排列,即对于数列a,二等队形为任意a【i】满足:a【i】>a【i+1】。现在给出一个长度为n的数列,从中最少去除多少个数可使数列变成二等队形数列。
做法和递增的没啥差别
#include<stdio.h>
#include<string.h>
#include<queue>
#include<cmath>
#define MAX 1000+10
#define INF 0x3f3f3f3f
int n;
int dp[MAX];
using namespace std;
int main(void) {
int a[MAX];
while (~scanf("%d", &n)) {
for (int i = 1; i <= n; i++)
dp[i] = 1;
for (int i = 1; i <= n; i++)
scanf("%d", &a[i]);
a[0] = INF;
dp[0] = 0;
for (int i = 1; i <= n; i++) {
for (int j = 0; j < i; j++) {
if (a[i] < a[j]) {
dp[i] = max(dp[j] + 1, dp[i]);
}
}
}
int maxx = -INF;
for (int i = 1; i <= n; i++) {
maxx = max(dp[i], maxx);
}
printf("%d\n", n - maxx);
}
return 0;
}
以上是关于HRBUST 2010简单dp+最长递减子序列的主要内容,如果未能解决你的问题,请参考以下文章