题解:B4350 [信息与未来 2025] 美味水果

这是一道贪心题。

每一天优先吃价值大的水果一定是最优的,我们假设两个水果的价值为 \(y\)\(x\),其中 \(y>x\),那么 \(x-\lfloor\sqrt x\rfloor\le y-\lfloor\sqrt y\rfloor\),所以价值大的水果一天流失的价值是不小于价值小的水果一天流失的价值,所以我们应该优先吃价值大的水果。但是这时候我们发现时间复杂度为 \(\mathcal O(n^2)\),我们以惊人的注意力发现,其实每个水果的价值最多进行 \(5\) 天后价值就变为 \(1\),然后以后不管多少天价值还是 \(1\),那么我们就可以进行剪枝优化成 \(\mathcal O(n)\)

AC code:

#include <bits/stdc++.h>
using namespace std;
const int N=100005;
int n;
int a[N],d,ans;
int main(){
    scanf("%d",&n);
    for(int i=1;i<=n;i++)
        scanf("%d",&a[i]);
    sort(a+1,a+n+1);
    for(int i=n;i;i--){
        int k=d;
        while(k!=0&&a[i]!=1)a[i]=sqrt(a[i]),k--;
        ans+=a[i];
        d++;
    }
    printf("%d",ans);
}
posted @ 2026-01-02 13:33  OI_emperor  阅读(2)  评论(0)    收藏  举报