当前位置: 首页 > 工具软件 > T2Z > 使用案例 >

2017日照夏令营 day3 t2 小z搭积木

黄聪
2023-12-01

题目描述:
小 Z 喜欢搭积木。小 Z 一共有 n 块积木,并且积木只能竖着一块一块的摞,可以摞多列。小 Z 的积木都是智能积木,第 i 块积木有一个情绪值 Xi。当摞在该积木上面积木总数超过 Xi 时,i 号积木就会不高兴。小 Z 情商这么高,肯定不希望有积木不高兴。但是他又希望每块积木都被用上,并且摞的积木列的总数最少。你能帮帮萌萌的小 Z 吗?

解题思路:
既然希望每块积木都被用上,那自然是能用的都用上,我们可以想到用贪心来解决这道题。
首先按照情绪值从小到大排序,将小的放在大的上面,能放就放,如果不能再放了,就需要再开一列,最后累加列数就是要求的结果。

#include<iostream>
#include<algorithm>
#include<cstdio>
using namespace std;
int n,a[5005],v[5005],ans,m;
int main(){
    cin>>n;
    for (int i=1;i<=n;i++) scanf("%d",&a[i]);
    sort(a+1,a+n+1);
    for (int i=1;i<=n;i++)
    if(!v[i]){
        ans++;
        m=1;
        for (int j=i+1;j<=n;j++)
        if (!v[j]&&a[j]>=m){
            v[j]=1;
            m++;
        }
    }
    cout<<ans;
    return 0;
}
 类似资料: