1.刘汝佳紫书区间问题三大情况

1.选择不相交区间

贪心策略:一定要选择第一个区间

2.区间选点问题

贪心策略:取最后一个点

3.区间覆盖问题: n个闭区间,选择尽量少的区间覆盖一条指定线段[s,t]

贪心策略:预处理掉[s,t]之外的区间,闭区间从最左向右开始覆盖

应用

Open Judge 1328

要求建在x轴半径d的雷达覆盖所有已知点

#include<iostream>
#include<cstdio>
#include<string>
#include<algorithm>
#include<queue>
#include<deque>
#include<set>
#include<map>
#include<cmath>
#include<stack>
const double PI = acos(-1.0);
#define eps 1e-6
#define INF 0x3f3f3f3f
typedef long long ll;
using namespace std; struct P {
double a;
double b;
friend bool operator <(const P& x, const P& y) {
if (x.b != y.b) return x.b < y.b;
else return x.a > y.a;
}
}; P p[]; int main() {
double d,xi,yi;
int n;
int kase = ;
while (scanf("%d%lf", &n, &d), n||d) {
memset(p, , sizeof p);
int t = ;
for (int i = ; i < n; i++) {
scanf("%lf%lf", &xi, &yi);
if (yi > d||yi<) {
t = ;
}
p[i].a = xi - sqrt(d * d - yi * yi);
p[i].b = xi + sqrt(d * d - yi * yi);
}
if (!t) printf("Case %d: -1\n", kase++);
if (!t) continue;
sort(p, p + n);
int ans = ;
double f = p[].b;
for (int i = ; i < n; i++) {
if (p[i].a > f) f = p[i].b, ans++;
}
printf("Case %d: %d\n", kase++, ans);
} return ;
}

POJ 1065

描述

C小加有一些木棒,它们的长度和质量都已经知道,需要一个机器处理这些木棒,机器开启的时候需要耗费一个单位的时间,如果第i+1个木棒的重量和长度都大于等于

第i个处理的木棒,那么将不会耗费时间,否则需要消耗一个单位的时间。因为急着去约会,C小加想在最短的时间内把木棒处理完,你能告诉他应该怎样做吗?

#include<iostream>
#include<cstdio>
#include<string>
#include<algorithm>
#include<queue>
#include<deque>
#include<set>
#include<map>
#include<cmath>
#include<stack>
const double PI = acos(-1.0);
#define eps 1e-6
#define INF 0x3f3f3f3f
typedef long long ll;
using namespace std; struct R {
int l;
int w;
friend bool operator <(const R& a, const R& b) {
if (a.w != b.w) return a.w < b.w;
else return a.l < b.l;
}
}; int vis[];
R a[]; int main() {
int T,n;
scanf("%d", &T);
while (T--) {
memset(vis, , sizeof vis);
memset(a, , sizeof a);
scanf("%d", &n);
for (int i = ; i < n; i++) scanf("%d%d", &a[i].l, &a[i].w);
sort(a, a + n);
int ans = ;
int cnt = ;
while (cnt!=n) {
ans++;
int f = -;
for (int i = ; i < n; i++) {
if (vis[i]) continue;
if (a[i].l >=f) f = a[i].l, cnt++, vis[i] = ;
}
}
printf("%d\n", ans);
}
return ;
}

有点思维的题

code:

#include<iostream>
#include<cstdio>
#include<string>
#include<algorithm>
#include<queue>
#include<deque>
#include<set>
#include<map>
#include<cmath>
#include<stack>
const double PI = acos(-1.0);
#define eps 1e-6
#define INF 0x3f3f3f3f
typedef long long ll;
using namespace std; int Hash[]; int main() {
int T,n;
int x, y;
scanf("%d", &T);
while (T--) {
memset(Hash, , sizeof Hash);
scanf("%d", &n);
for (int i = ; i < n; i++) {
scanf("%d%d", &x, &y);
if (x > y) swap(x, y);
if (x & ) x >>= ;
else x = x - >> ;
if (y & ) y >>= ;
else y = y - >> ;
for (int i = x; i <= y; i++) Hash[i]++;
}
int Max = -;
for (int i = ; i < ; i++) {
Max = max(Max, Hash[i]);
}
printf("%d\n", Max*);
}
return ;
}

可以对比的两题:

贪心策略:后悔法

#include <algorithm>
#include <cmath>
#include <cstdio>
#include <cstring>
#include <iostream>
#include <queue>
using namespace std;
struct f {
long long d;
long long x;
} a[];
bool cmp(f A, f B) { return A.d < B.d; }
priority_queue<long long, vector<long long>, greater<long long> > q;
int main() {
long long n, i, j;
cin >> n;
for (i = ; i <= n; i++) {
scanf("%d%d", &a[i].d, &a[i].x);
}
sort(a + , a + n + , cmp);
long long ans = ;
for (i = ; i <= n; i++) {
if (a[i].d <= q.size()) {
if (q.top() < a[i].x) {
ans += a[i].x - q.top();
q.pop();
q.push(a[i].x);
}
} else {
ans += a[i].x;
q.push(a[i].x);
}
}
cout << ans << endl;
return ;
}

#include<iostream>
#include<cstdio>
#include<string>
#include<algorithm>
#include<queue>
#include<deque>
#include<set>
#include<map>
#include<cmath>
#include<cstring>
#include<stack>
const double PI = acos(-1.0);
#define eps 1e-6
#define INF 0x3f3f3f3f
typedef long long ll;
using namespace std; struct P {
int d;
int s;
friend bool operator < (const P& a, const P& b) {
return a.s >b.s;
}
}; P p[];
int vis[]; int main() {
int T;
int n;
int tot;
scanf("%d", &T);
while (T--) {
tot = ;
scanf("%d", &n);
memset(p, , sizeof p);
memset(vis, , sizeof vis);
for (int i = ; i < n; i++) scanf("%d", &p[i].d);
for (int i = ; i < n; i++) scanf("%d", &p[i].s);
sort(p, p + n);
for (int i = ; i < n; i++) {
int x = p[i].d;
while (x) {
if (!vis[x]) {
vis[x] = ;
break;
}
x--;
}
if (!x) tot += p[i].s;
}
printf("%d\n", tot);
}
return ;
}

 

HZNU-ACM寒假集训Day11小结 贪心的更多相关文章

  1. 中南大学2019年ACM寒假集训前期训练题集(基础题)

    先写一部分,持续到更新完. A: 寒衣调 Description 男从戎,女守家.一夜,狼烟四起,男战死沙场.从此一道黄泉,两地离别.最后,女终于在等待中老去逝去.逝去的最后是换尽一生等到的相逢和团圆 ...

  2. 中南大学2019年ACM寒假集训前期训练题集(入门题)

    A: 漫无止境的八月 Description 又双叒叕开始漫无止境的八月了,阿虚突然问起长门在这些循环中团长哪几次扎起了马尾,他有多少次抓住了蝉等等问题,长门一共回复n个自然数,每个数均不超过1500 ...

  3. HZNU-ACM寒假集训Day10小结 单调栈-单调队列

    数据结构往往可以在不改变主算法的前提下题高运行效率,具体做法可能千差万别,但思路却是有规律可循 经典问题:滑动窗口  单调队列O(n) POJ 2823 我开始写的: TLE 说明STL的库还是有点慢 ...

  4. HZNU-ACM寒假集训Day8小结 最小生成树

    最小生成树(无向图) Kruskal 给所有边按从小到大排序 形成环则不选择(利用并查集) P1546 最短网络   https://www.luogu.com.cn/problem/P1546 #i ...

  5. HZNU-ACM寒假集训Day3小结 搜索

    简单搜索 1.DFS UVA 548 树 1.可以用数组方式实现二叉树,在申请结点时仍用“动态化静态”的思想,写newnode函数 2.给定二叉树的中序遍历和后序遍历,可以构造出这棵二叉树,方法是根据 ...

  6. HZNU-ACM寒假集训Day1小结 STL 并查集

    常用STL 1.优先队列 priority_queue 内部是用堆(heap)实现的 priority_queue<int> pq; 默认为一个“越小的整数优先级越低的优先队列” 对于一些 ...

  7. HZNU-ACM寒假集训Day12小结 数论入门 题解

    算不出的等式 BJOI2012 看到这题 真没什么办法 无奈看题解 1.注意到p/q 联想到斜率 2.注意到 [ ] 联想到整点 注意到k在变化,构造一次函数 f(x)=p/q*x ,g(x)=q/p ...

  8. HZNU-ACM寒假集训Day12小结 数论入门

    符号说明 a|b      a整除b (a,b)    a与b的最大公因数 [a,b]     a与b的最小公倍数 pα||a    pα|a但pα+1∤a a≡b(mod m) a与b对模m同余 a ...

  9. HZNU-ACM寒假集训Day10小结 树-树形DP

    树形DP 加分二叉树 洛谷P1040 注意中序遍历的特点:当根节点编号k时,编号小于k的都在其左子树上,编号大于k的都在右子树 转移方程 f[i,j]=max{f[i,k-1]*f[k+1,j]+d[ ...

随机推荐

  1. zabbix监控 -mysql数据库

    1.禁用安装防护[root@mysql213 ~]# vi /etc/selinux/config #关闭安装 SELINUX=disabled 2.授权zabbix监控账号 mysql -uroot ...

  2. Linux系统监控 zabbix-agent 主机添加的操作页面

    #!/bin/bash#设置解析#安装zabbix源.aliyun YUM源# rpm -ivh http://repo.zabbix.com/zabbix/4.0/rhel/7/x86_64/zab ...

  3. python之闭包,装饰器

    目录 函数对象 :相当于变量名 函数对象的作用: 1. 可以引用 2. 可以作为函数的返回值 3. 可以作为容器的元素 4. 可以作为函数的参数 闭包 定义: 如果在一个函数的内部定义了另一个函数,外 ...

  4. Vue二次精度随笔(2)

    1.vue中数组更新是否会引起视图刷新的研究 (1)vue中修改数组可以引起视图刷新的方法 (2)不会引起数组刷新的方法,需要手动进行赋值 (3)有些数组的变化是不能够引起视图的刷新的,一个是修改数组 ...

  5. java创建线程方式

    1.继承Thread类 public class ThreadCreator extends Thread{ public static void main(String[] args) { //第一 ...

  6. ffmpeg 学习:002-代码架构

    前言 使用 ffmpeg 库时,最好先理解好ffmpeg的代码结构图. 下面这张图表明了FFmpeg在解码一个视频的时候的函数调用流程,为了保证结构清晰,其中仅列出了最关键的函数,剔除了其它不是特别重 ...

  7. 第1节 网站点击流项目(上):4、网站的数据采集,使用flume的taildir实现多个文件的监控采集

    一. 模块开发----数据采集 1. 需求 在网站web流量日志分析这种场景中,对数据采集部分的可靠性.容错能力要求通常不会非常严苛,因此使用通用的flume日志采集框架完全可以满足需求. 2. Fl ...

  8. ROS学习笔记2-基本概念

    本笔记来源于:http://wiki.ros.org/ROS/Concepts ROS文件系统级别文件系统级别主要包含了你能在ROS的磁盘上遇到的资源,包括: 包(Packages):包是ROS中资源 ...

  9. 059、Java中定义一个有参数无返回值的方法

    01.代码如下: package TIANPAN; /** * 此处为文档注释 * * @author 田攀 微信382477247 */ public class TestDemo { public ...

  10. delphi中json转dataset

    unit uJSONDB; interface uses SysUtils, Classes, Variants, DB, DBClient, SuperObject, Dialogs; type T ...