1. 程式人生 > >東北育才 d1t1 優雅的序列

東北育才 d1t1 優雅的序列

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>
#include
<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; }
View Code

東北育才 d1t1 優雅的序列