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. C++ 结构体指针理解

    上一篇基础链接https://www.cnblogs.com/xuexidememeda/p/12283845.html 主要说一下链表里面双重指针 先说一下结构体 typedef struct LN ...

  2. VMwara虚拟机三种网络模式

    虚拟机:虚拟机是能够让用户在一台物理机上模拟出多个操作系统的软件其本质是通过中间层实现计算机资源的管理和再分配让系统资源的利用率最大化VMware即是一款虚拟机软件注意:虚拟机和操作系统的区别,虚拟机 ...

  3. 第1节 storm编程:2、storm的基本介绍

    课程大纲: 1.storm的基本介绍 2.storm的架构模型 3.storm的安装 4.storm的UI管理界面 5.storm的编程模型 6.storm的入门程序 7.storm的并行度 8.st ...

  4. Mybatis入门(六)联查之一对多

    上一章说了多对一,很多学生被一个老师教,这一章是一个老师教很多学生 目录基本没有变化只是改了配置文件: 2.配置文件: TeacherMapper接口类: package com.hdlf.dao; ...

  5. [CISCN2019 华北赛区 Day1 Web2]ikun

    知识点:逻辑漏洞.jwt密钥破解.python反序列化漏洞 进入靶机查看源码: 提示需要买到lv6,注册账号发现给了1000块钱,根据ctf套路应该是用很低的价格买很贵的lv6,首页翻了几页都没发现l ...

  6. 4.2 Scikit-Learn简介(机器学习篇)

    目录 第四章 机器学习 4.1 机器学习简介 4.1.1 机器学习分类 4.2 Scikit-Learn简介 4.2.1 Scikit-Learn的数据表示 4.2.2 Scikit-Learn的评估 ...

  7. Python【day 19】反射

    '''''' ''' 一.昨日内容回顾 1.依赖关系 1.弱关系.多态 1.松耦合 2.大象可以装冰箱,也可以装高压锅,就是多态 2.例子: 1.大象装冰箱 2.大象装高压锅 3.你打车 3.写法 大 ...

  8. Ecshop系统二次开发教程及流程演示

      来源:互联网 作者:佚名 时间:03-01 16:05:31 [大 中 小] Ecshop想必大家不会觉得陌生吧,大部分的B2C独立网店系统都用的是Ecshop系统,很受用户的喜爱,但是由于Ecs ...

  9. ie brower 点击用默认浏览器打开链接

    <script> function GetCurrentJumpUrl(){ var eleLink = document.getElementById('adLink'); if(ele ...

  10. Wincc V7.3SE安装截图

    打开某个工程出错,能力所限,找不到问题,没能解决