東北育才 d1t1 優雅的序列
阿新 • • 發佈:2017-07-14
clas 沒有 cpp closed 描述 using 最大的 水題 .cpp
優雅的序列
grace.cpp
題目描述
設一個含有n個數的序列的優雅度為滿足ai<ai+1(1≤i<n)的i的個數。現在給出一個含有n個數的序列,小X想要將這n個數調整順序,使得新序列的優雅度最大。同樣喜歡優雅的你,能否求出這個最大的優雅度呢?
輸入格式:
第1行:一個整數n
第2行:n個整數,表示原始序列
輸出格式:
輸出1個整數,為新序列的最大優雅度
樣例輸入 |
樣例輸出 |
5 1 3 2 4 1 |
3 |
樣例解釋
排列方式不唯一,一種可行的排列方式為1、2、1、3、4,優雅度為3。可以通過窮舉法證明這是最優方案。
數據範圍
對於10%的數據,n≤10
對於40%的數據,n≤1000
對於100%的數據,n≤100000,序列中的每個數≤1000000000
水題,仔細觀察之後發現只要沒有重復的數,答案即為n-1。
那麽就把一個數重復多次,對答案的貢獻度就是一個數,所以答案為n-1-(這個數的個數-1)=n-這個數的個數。
再多添加別的數字,我們發現只要別的數的的個數比最多的數的個數少,就可以對答案產生貢獻,所以同理答案=n-出現最多的數的個數
#include<iostream> #include<cstdio> #include<cstring> #includeView Code<algorithm> using namespace std; int a[100031],dp[100031]={0}; int main() { // freopen("grace.in","r",stdin); //freopen("grace.out","w",stdout); int i,j; int n; scanf("%d",&n); for(i=1;i<=n;i++) { scanf("%d",&a[i]); } int ans1=0; sort(a,a+n+1); a[0]=a[1]; int k=1; for(i=1;i<=n;i++) { if(a[i-1]!=a[i]) { k++; } dp[k]++; ans1=max(ans1,dp[k]); } int ans; ans=n-ans1; cout<<ans; }
東北育才 d1t1 優雅的序列