1. 程式人生 > >汕頭市隊賽 SRM10 T1 貪心只能過樣例

汕頭市隊賽 SRM10 T1 貪心只能過樣例

spl style 一行 one 數據 getch hid lar algorithm

貪心只能過樣例 SRM 10

描述

給出n個數a[i](1<=a[i]<=n),問最多能把這些數分成幾組,使得每個數a[i]所在的組至少有a[i]個數

輸入格式

第一行一個整數n,接下來n行每行一個整數分別是a[1],a[2],...,a[n]

輸出格式

一行,輸出答案,一個整數

樣例輸入

5
2
1
2
2
3

樣例輸出

2

數據範圍與約定

數據有梯度,分布如下: 0<n<=20 7組數據
20<n<=5000 15組數據
5000<n<=1000000 23組數據

樣例解釋

一種方案是分為2,2和1,2,3兩組

————————————————————————

這道題維護一波前綴最小值就好了QAQ

技術分享
#include<cstdio>
#include<cstring>
#include<algorithm>
#define LL long long
using namespace std;
const int M=1000007,inf=0x3f3f3f3f;
int read(){
    int ans=0,f=1,c=getchar();
    while(c<0||c>9){if(c==-) f=-1; c=getchar();}
    while(c>=0&&c<=9){ans=ans*10+(c-
0); c=getchar();} return ans*f; } LL n,w[M],ans; LL f[M],mx[M]; int main() { n=read(); for(int i=1;i<=n;i++) w[i]=read(); sort(w+1,w+1+n); for(int i=1;i<=n;i++){ if(i-w[i]<0) f[i]=0; else f[i]=mx[i-w[i]]+1; mx[i]=max(f[i],mx[i-1]); }printf("%lld\n
",f[n]); return 0; }
View Code

汕頭市隊賽 SRM10 T1 貪心只能過樣例