http://acm.zzuli.edu.cn/problem.php?id=2432
题目描述
给定序列A={A1, A2, A3, A4,...,An}, 求改变序列中的一些元素,使序列A形成一个非递减序列B, 即序列B中,任意连续的两个值都存在 Bn-1 <= Bn。
输入
测试实例包括T组测试数据。(T <= 100)
每组测试数据第一行为一个数字N,代表给定序列中的元素数。第二行为N个数字代表给定序列中元素。(2 <= N <= 1000, 0 <= 元素值 <= 1e5)
输出
结果输出最小改变的元素数,是给定序列变为非递减序列。
样例输入
2 5 1 2 3 4 5 5 5 4 3 2 1
样例输出
0 4
求出数组中最长的非递减序列,这些值不用改变,其余的都要改变。
#include
#include
#include
using namespace std;
#define N 1020
int a[N],dp[N];
int main()
{
int t,n,i,j,ans;
scanf("%d",&t);
while(t--)
{
scanf("%d",&n);
for(i=1;i<=n;i++)
scanf("%d",&a[i]);
for(i=0;i<=n;i++)
dp[i]=1;
ans=1;
for(i=1;i<=n;i++)
{
for(j=i+1;j<=n;j++)
{
if(a[j]>=a[i])
dp[j]=max(dp[i]+1,dp[j]);
ans=max(ans,dp[j]);
}
}
printf("%d\n",n-ans);
}
return 0;
}