USACO 2020 January Contest, Silver

USACO 2020 January Contest, Silver

1.Berry Picking

题目意思

给定 n 颗树,分别有 ai 个果子,求选出 m 篮果子使得最少的 m2 篮最多,要求每篮的果子都必须来自同一棵树。

思路

  1. 我们要先知道,要使最少的 m2 篮果子多一些,就是要使得最多的 m2 篮果子少一些,而我们要让人果子取值更灵活,所以我们第 m2 个果篮要尽量多,由此我们可以得到最多的 m2 篮子果子的数量要相同。
  2. 然后再枚举果子的个数 w,把取出来的果子的篮子为整篮,然后我们用贪心算法,设出 now 表示最多取出的整篮数。

情况分为以下:

  1. nowm ,答案为 m2×w
  2. nowm2 答案就为 (nowm2×w)
  3. nowm2 无答案
#include <bits/stdc++.h> using namespace std; const int N = 1500; int n, k, maxx = 0, res = 0; int a[N]; int main() { freopen("berries.in", "r", stdin); freopen("berries.out", "w", stdout); cin >> n >> k; for (int i = 1; i <= n; i++) { cin >> a[i]; maxx = max(maxx, a[i]); } sort(a + 1, a + n + 1); for (int i = 1; i <= maxx; i++) { priority_queue<int> q; int ans = 0; for (int j = 1; j <= n; j++) ans += a[j] / i, q.push(a[j] % i); if (ans < k >> 1) continue; else if (ans < k) { int t = ans - (k >> 1), cr = t * i; t = (k >> 1) - t; while (t--) cr += q.top(), q.pop(); res = max(res, cr); } else res = max(res, (k >> 1) * i); } cout << res << endl; return 0; }

__EOF__

本文作者ljfyyds
本文链接https://www.cnblogs.com/ljfyyds/p/17026054.html
关于博主:评论和私信会在第一时间回复。或者直接私信我。
版权声明:本博客所有文章除特别声明外,均采用 BY-NC-SA 许可协议。转载请注明出处!
声援博主:如果您觉得文章对您有帮助,可以点击文章右下角推荐一下。您的鼓励是博主的最大动力!
posted @   ljfyyds  阅读(31)  评论(0编辑  收藏  举报
相关博文:
阅读排行:
· winform 绘制太阳,地球,月球 运作规律
· TypeScript + Deepseek 打造卜卦网站:技术与玄学的结合
· AI 智能体引爆开源社区「GitHub 热点速览」
· Manus的开源复刻OpenManus初探
· 写一个简单的SQL生成工具
点击右上角即可分享
微信分享提示