zzuli2432: 非遞減序列(動態規劃)
阿新 • • 發佈:2018-12-06
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<stdio.h> #include<string.h> #include<algorithm> 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; }