NFLS贪心与数据结构题单笔记(未完结)

news/2024/11/20 22:02:22/文章来源:https://www.cnblogs.com/Kang-shifu/p/18559428

A. 奶牛飞车

image
贪心,把最慢的放前面


#include <bits/stdc++.h>
using namespace std;
constexpr int maxn = 1e6 + 10;
int n, m, d, L;
int s[maxn];
int ans = 0;
inline bool cmp(int x, int y) { return x > y; }
int main() {cin >> n >> m >> d >> L;for (int i = 1; i <= n; i++) {cin >> s[i];}sort(s + 1, s + 1 + n);int num = 0;for (int i = 0, j = 0; i < n; j++) {if (j == m)j = 0, num++;i++;while (s[i] - num * d < L) {i++;if (i > n) {cout << ans << endl;return 0;}}ans++;}cout << ans << endl;return 0;
}

B. 牛奶规划

Lay博士有N(1<=N<=10000)头奶牛准备吃草,每头牛都需要一个单位时间来吃草,且每一个时刻最多只能让一头牛吃草.牛i必须在小于等于di时刻才能吃草(1<=di<=10000)吃了草之后能产出gi(1<=gi<=1000)的奶.时间从t=1开始.

请帮助Lay博士求出最多能得到的牛奶数量.



按照牛奶的大小从大到小排序。

之后对于每一只奶牛,如果在他挤奶时间之前有空闲时间,则可以挤奶,否则换下一只奶牛。可以证明这样取到的牛奶量是最大的。

C. 集市班车

逛逛集市,兑兑奖品,看看节目对农夫约翰来说不算什么,可是他的奶牛们非常缺乏锻炼——如果要逛完一整天的集市,他们一定会筋疲力尽的。所以为了让奶牛们也能愉快地逛集市,约翰准备让奶牛们在集市上以车代步。但是,约翰木有钱,他租来的班车只能在集市上沿直线跑一次,而且只能停靠N 个地点(所有地点都以1到N之间的一个数字来表示)。现在奶牛们分成K 个小组,第 i 组有Mi (1 ≤ Mi ≤ N)头奶牛,他们希望从Si跑到Ti (1 ≤ Si < Ti ≤ N)。由于班车容量有限,可能载不下所有想乘车的奶牛们,此时也允许小组里的一部分奶牛分开乘坐班车。约翰经过调查得知班车的容量是C ,请你帮助约翰计划一个尽可能满足更多奶牛愿望的方案。

只有一间教室,要安排尽可能多的活动。

那么我们用一个变量t表示已安排最后一个活动的结束时间,赋初值为-1,按活动结束时间排序,依次接受,接受的时候注意判断,一定要该活动的开始时间>=上一个活动的结束时间。

说了这么多,我们来看这道题。

C的空间可以看作是共C间教室,那么我们就应该用一个数组来存储每一空间位置上奶牛的下车地点(每一间教室活动结束的时间)。贪心策略:同样按照结束时间排好,每一次上尽可能多的奶牛,上了之后,在对应空间位置上存放该奶牛的下车地点,当一只奶牛上车时,优先考虑与上一只奶牛时间点相近的(尽量使车可以坐满)

炸树

Byteotian Cave的结构是一棵N个节点的树,其中某些点上面已经安置了火咋药,现在需要点燃M个点上的引线引爆所有的火咋药。

某个点上的引线被点燃后的1单位时间内,在树上和它相邻的点的引线会被点燃。

如果一个有火咋药的点的引线被点燃,那么这个点上的火咋药会爆火咋。

求引爆所有火咋药的最短时间。



一眼二分答案,然后统计当前答案的最小火咋药需求数,我的假做法,打了n个补丁依旧从20分一路涨到了57分,三分三分的涨,没救了。

#include <bits/stdc++.h>
using namespace std;
constexpr int maxn = 4000000;
int n, m, B;
struct edge {int to, next;
} e[maxn];
int cnt = 0;
int head[maxn];
int node[maxn], IN[maxn], OUT[maxn];
void addedge(int u, int v) {e[++cnt].to = v;e[cnt].next = head[u];head[u] = cnt;OUT[u]++, IN[v]++;
}
int ans = 0;
int dfs(int x, int need, int fa) {if (need == 0) {ans = B;return 0;}int res = 0;if (node[x] == 1)res = 1;elseres = 0;for (int i = head[x]; i; i = e[i].next) {if (e[i].to != fa)res = max(res, dfs(e[i].to, need, x) + 1);}if (res > need) {ans++, res = -need;}return res;
}
int main() {cin >> n >> m;for (int i = 1; i <= n; i++) {cin >> node[i];if (node[i] == 1) {B++;}}for (int i = 1; i < n; i++) {int u, v;cin >> u >> v;addedge(u, v);addedge(v, u);}int l = 0, r = n;int mid;while (l < r) {mid = (l + r) >> 1;ans = 0;dfs(1, mid, -1);if (ans <= m) {r = mid;} else {l = mid + 1;}}cout << l << endl;return 0;
}

归根到底统计答案还得用一个类似DP的东西,但是不算DP。
f[x]表示在x的子树内未被覆盖的与x距离最远的敏感词点距离,g[x]表示在x的子树内与x距离最近的点燃点距离。
如果f[x]+g[x]<=mid,那么就说明x子树内就可以搞定。
如果f[x]==mid,那么就说明x一定要被点燃。
剩下的情况就可以留给祖先处理。

漫长的征途

1、假设在能跑到的范围内,第一个价格比他便宜的加油站to,就在当前加油站加油,加到恰好能跑到to2、在能跑到的范围内,没有价格比他便宜的加油站,就在now加满油,跑到能跑到的范围内,价格最便宜的加油站注意,在1中不是跑到范围内最便宜的加油站,而是只要遇到一个比now便宜,就跑过去#include <cstdio>
#include <iostream>
#include <algorithm>
using namespace std;
#define int long longint N, G, B, D;void read(int &x) {x = 0;char c = getchar();while (!isdigit(c)) c = getchar();while (isdigit(c)) {x = x * 10 + c - '0';c = getchar();}
}struct node {int d, p;
} e[50005];int dis[50005], price[50005];int findmin(int s, int lim) {int now = s + 1, to = 50003;while (now <= N) {if (dis[now] - dis[s] > lim)return to;if (price[now] < price[s])return now;if (price[now] < price[to])to = now;now++;}return to;
}inline bool cmp(node a, node b) { return a.d < b.d; }signed main() {cin >> N >> G >> B >> D;for (int i = 1; i <= N; i++) cin >> e[i].d >> e[i].p;sort(e + 1, e + N + 1, cmp);for (int i = 1; i <= N; i++) {dis[i] = e[i].d;price[i] = e[i].p;if (dis[i] - dis[i - 1] > G) {cout << "-1";return 0;}}if (dis[1] > B || D - dis[N] > G) {cout << "-1";return 0;}price[50003] = 2e9;int now = 0, to;to = findmin(now, B);if (now > N) {cout << "0";return 0;}now = to;int nowB = B - dis[to];int ans = 0;if (dis[N] == D)price[N] = 0;else {N++;dis[N] = D;price[N] = 0;}while (now < N) {to = findmin(now, G);if (price[to] > price[now]) {ans += (G - nowB) * price[now];nowB = G - dis[to] + dis[now];} else {ans += (dis[to] - dis[now] - nowB) * price[now];nowB = 0;}now = to;}cout << ans << endl;return 0;
}

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.hqwc.cn/news/837554.html

如若内容造成侵权/违法违规/事实不符,请联系编程知识网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

提取图片中目标物轮廓的像素尺寸

利用OpenCV库,对图片空间转化、灰度处理、二值化处理等,寻找图片中目标物轮廓像素尺寸。1.导入数据库 import cv2 import numpy as np from PIL import Image2.导入图片 image_tif = Image.open(1.tif) #导入tif图像 image_tif.convert(RGB).save(1p.png,PNG) # 转换为png格…

[极客大挑战 2019]BuyFlag

点击右上角的菜单,有一个payflag,直接点击,进入到了pay.php页面发现,需要得到flag有两个要求:必须是该校的学生,密码必须正确。在该页面的网页底部,有代码提示,要求密码不能是纯数字,最后又要==404密码才正确。我们可以想到利用php的弱类型比较:只要前缀有404就好。那…

Thinkpad P14s 的 archlinux 成长手册(i3-wm 窗口管理器)

目录电脑信息i3-wm 快捷键分辨率调整终端版文件管理器壁纸设置触摸板配置合盖后不休眠i3 配置文件截图工具剪切板i3lock-color卸载 i3lock安装 i3lock-color定义配置文件i3 配置文件增加锁屏配置i3 主题和图标修改i3 工作区配置分配应用程序到工作区工作区字体修改i3 启用透明效…

一键生成美观的彩页演示+AI的训练过程科普

一键生成美观彩页 + AI训练揭秘:让你的内容瞬间高大上! 阅读时间: 8分钟 | 字数: 1300+ 你是否曾为制作精美的演示文稿而烦恼?是否对AI的训练过程充满好奇?今天,让我们一起探索如何用AI一键生成美观彩页,同时揭秘ChatGPT的训练过程! 🌟 天工AI彩页:内容创作的革命 🤔事情…

2个月搞定计算机二级C语言——真题(12)解析

1. 前言 本篇我们讲解2个月搞定计算机二级C语言——真题122. 程序填空题 2.1 题目要求2.2 提供的代码 #include <stdio.h> #define N 3 int fun(int (*a)[N]) {int i, j, m1, m2, row, colum;m1 = m2 = 0;for (i = 0; i < N; i++){j = N - i - 1; m1 += a[i][…

mini-lsm通关笔记Week2Day5

项目地址:https://github.com/skyzh/mini-lsm 个人实现地址:https://gitee.com/cnyuyang/mini-lsmSummary 在本章中,您将:实现manifest文件的编解码。 系统重启时从manifest文件中恢复。要将测试用例复制到启动器代码中并运行它们, cargo x copy-test --week 2 --day 5 ca…

SSTI(模板注入)

SSTI:SSTI(Server-Side Template Injection)即服务端模板注入,它是一种安全漏洞攻击技术。 当应用程序在服务器端使用模板引擎来呈现动态生成的内容时,如果用户可以控制模板引擎的输入,就可能导致 SSTI 漏洞。 服务端接收攻击者的恶意输入以后,未经任何处理就将其作为 Web…

blktrace分析IO

前言 上篇博客介绍了iostat的一些输出,这篇介绍blktrace这个神器。上一节介绍iostat的时候,我们心心念念希望得到块设备处理io的service time,而不是service time + wait time,因为对于评估一个磁盘或者云磁盘而言,service time才是衡量磁盘性能的核心指标和直接指标。很不…

数据库 校验名称唯一性,用于新增和修改功能

数据库 校验名称唯一性,用于新增和修改功能@目录概述代码 概述应用场景:xml,注解方式的自己略微改造即可使用。 提示:存粹方便自己拷贝代码,用于新增和修改前校验名称唯一性问题。代码Service/*** 校验名称是否重名* @Author 211145187* @Date 2022/5/5 15:37* @param nam…

人工智能之机器学习最优化基础——凸优化

凸优化(Convex Optimization) 是优化问题的一个重要分支,其目标是最小化或最大化一个凸函数(或凹函数),通常受限于一组凸约束条件。由于凸优化问题具有良好的数学性质,许多优化问题可以转化为凸优化问题并高效求解。1. 什么是凸优化问题? 一个标准的凸优化问题可以表示…

可信执行环境(TEE)学习笔记

可信执行环境(TEE)学习笔记来越多的数据在云环境下进行存储、共享和计算,云环境下的数据安全与隐私保护也逐渐成为学术界以及工业界关注的热点问题。目前阶段,隐私保护技术主要基于密码算法及协议(如安全多方计算、同态加密等)完成场景落地,其优点主要在于具有较高的安全…

同步与互斥与通信

同步与互斥 同步:两任务要协调 互斥:两任务要争用 举一个例子。在团队活动里,同事A先写完报表,经理B才能拿去向领导汇报。经理B必须等同事A完成报表,AB之间有依赖,B必须放慢脚步,被称为同步。在团队活动中,同事A已经使用会议室了,经理B也想使用,即使经理B是领导,他也…