2023-03-2 垦田计划

文章介绍了如何使用贪心策略解决计算机软件能力认证考试中的垦田计划问题,通过维护一个数组表示开垦耗时与缩短一天所需资源的关系,逆序遍历并优化资源分配。代码展示了如何实现这一算法,以找到最小开垦耗时所需的资源总量。
摘要由CSDN通过智能技术生成

原题链接:

计算机软件能力认证考试系统

题解:

贪心:

维护一个数组用于存储"第i块区域开垦耗时-缩短 1 天所需资源数量",然后逆序遍历,如果当前资源可以维持当前最大开垦耗时区域的优化资源(缩短该区域开垦时间 1 天所需资源数量),那么就消耗,然后当前的缩短 1 天所需资源数量加到下一个最大开垦耗时区域的优化资源中即可,直到m耗尽或者减到k(最小开垦耗时)即可。

例子:

样例一:

4 9 2
6 1
5 1
6 2
7 1

流程:

初始:5-1, 6-(2+1), 7-1  m:9

①:5-1, 6-(3+1) m:8

②:5-(1+4) m:4

③:end

二分:

参考Pujx(orz):

CCF-CSP认证考试 202303-2 垦田计划 100分题解-CSDN博客

代码:

#include<bits/stdc++.h>
using namespace std;
using PII = pair<int, int>;
int n, m, k;
int min_d = 0;
const int N = 1e5 + 10;
int T[N];

int main() {
	cin >> n >> m >> k;
	for (int i = 0;i < n;i++) {
		int t, c;cin >> t >> c;
		min_d = max(min_d, t);
		T[t] += c;
	}

	for (int i = min_d;i >= k + 1;i--) {
		if (m > T[i]) {
			m -= T[i];
			T[i - 1] += T[i];
			min_d = i - 1;
		}
		else break;
	}
	cout << min_d;
}

坑点:

  • 7
    点赞
  • 4
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值