贪心

区间相关问题

选择不相交区间:

hdu 2037

给定一些区间,选择尽量多的区间,他们互相不交叉。(活动安排问题)

分析:贪心思路是解决活动安排问题的好方案。

按照区间右端点排序,从前往后遍历,给后面的选择留出更多的时间。

#include <bits/stdc++.h>

using namespace std;

struct Node {
int l,r;
bool operator < (const Node & rhs) const {
return r < rhs.r;
}
}nodes[];

int n;

int main()
{
while(scanf("%d",&n),n) {
for(int i = ; i < n; i++) scanf("%d%d",&nodes[i].l,&nodes[i].r);
sort(nodes,nodes+n);
int pos = nodes[].r;

int ans = ;
for(int i = ; i < n; i++) {
if(nodes[i].l>=pos) {
ans ++;
pos = nodes[i].r;
}
}

printf("%d\n",ans);

}
return ;
}

区间选点

数轴上有n个闭区间,取尽量少的点,使得每个区间内都至少有一个点(pku 3485)

多年前写的代码了~


#include <cstdio>
#include <cmath>
#include <algorithm>

using namespace std;

const int maxn = ;

struct Point {
double x,y;
} points[maxn];

struct Line {
double x,y;
} lines[maxn];

bool cmp(Line a,Line b) {
return a.y < b.y;
}

int main()
{
double s;
double d;
while(~scanf("%lf%lf",&s,&d)) {
int n;
scanf("%d",&n);
for(int i=; i<n; i++) {
scanf("%lf%lf",&points[i].x,&points[i].y);
lines[i].x = points[i].x - sqrt(d*d-points[i].y*points[i].y);
lines[i].y = points[i].x + sqrt(d*d-points[i].y*points[i].y);
}

sort(lines,lines+n,cmp);
int ans = ;
double cur = lines[].y;
for(int i=; i<n; i++) {
if(cur>=lines[i].x&&cur<=lines[i].y)
continue;
else {
cur = lines[i].y;
ans++;
}
}
printf("%d\n",ans);
}
return ;
}

区间覆盖问题

数轴上有n个闭区间,选择尽量少的区间去覆盖一条指定线段[s,t]。紫书P233。

扫描线

https://nanti.jisuanke.com/t/17309

题意:有N个站台,每个站台有一些人要上车,上车的人是从某一站台到某一个站台[l,r]区间,有w个人,求最少安排多少个位置。

此题是个大坑货~之前WA了,一直以为我的扫描线写错了,原来是一个排序因子,当时间相等时,先下车再上车。


#include <bits/stdc++.h>

using namespace std;

struct Node {
int l,w,flag;
bool operator < (const Node & rhs) const {
if(l!=rhs.l) return l < rhs.l;
else return flag < rhs.flag;
}
};

int main()
{
int n;
while(scanf("%d",&n),n) {

int l,r,w;
vector<Node> v;
for(int i = ; i < n; i++) {
scanf("%d%d%d",&l,&r,&w);
v.push_back(Node{l,w,});
v.push_back(Node{r,w,-});
}

sort(v.begin(),v.end());
int ans = ;
int tmp = ;
for(int i = ; i < *n; i++) {
if(v[i].flag==) {
tmp += v[i].w;
ans = max(ans,tmp);
}
else {
tmp -=v[i].w;
}
}
printf("%d\n",ans);
}
puts("*");
return ;
}

扫描法

相比于扫描线还是很简单的,不过还是主要看思路。

uva 11054

题意:有n 个酒庄,有的酒庄需要货,有的酒庄卖货,​ 将一单位的酒从一个地方放到相邻地方耗费1;

求平衡供需关系的最小花费。

对于一号酒庄,他要等于0,那么一定是从2号搬进,或者搬出去。这样就有子问题产生了。

扫描法和普通枚举,在于要维护一些重要的值,简化计算。


#include <bits/stdc++.h>
using namespace std;
typedef long long ll;
int main() {
int n;
while(scanf("%d",&n),n) {
ll ans = ,a,last = ;

for(int i = ; i < n; i++) {
cin>>a;
ans += abs(last);
last +=a;
}
cout<<ans<<endl;
}
return ;
}

ACM-ICPC(10/23)的更多相关文章

  1. hduoj 4715 Difference Between Primes 2013 ACM/ICPC Asia Regional Online —— Warmup

    http://acm.hdu.edu.cn/showproblem.php?pid=4715 Difference Between Primes Time Limit: 2000/1000 MS (J ...

  2. 2015 ACM / ICPC 亚洲区域赛总结(长春站&北京站)

    队名:Unlimited Code Works(无尽编码)  队员:Wu.Wang.Zhou 先说一下队伍:Wu是大三学长:Wang高中noip省一:我最渣,去年来大学开始学的a+b,参加今年区域赛之 ...

  3. 2017 ACM/ICPC Asia Regional Qingdao Online

    Apple Time Limit: 1000/1000 MS (Java/Others)    Memory Limit: 65535/32768 K (Java/Others)Total Submi ...

  4. ACM/ICPC 之 BFS(离线)+康拓展开(TSH OJ-玩具(Toy))

    祝大家新年快乐,相信在新的一年里一定有我们自己的梦! 这是一个简化的魔板问题,只需输出步骤即可. 玩具(Toy) 描述 ZC神最擅长逻辑推理,一日,他给大家讲述起自己儿时的数字玩具. 该玩具酷似魔方, ...

  5. ACM ICPC 2015 Moscow Subregional Russia, Moscow, Dolgoprudny, October, 18, 2015 D. Delay Time

    Problem D. Delay Time Input file: standard input Output file: standard output Time limit: 1 second M ...

  6. hduoj 4712 Hamming Distance 2013 ACM/ICPC Asia Regional Online —— Warmup

    http://acm.hdu.edu.cn/showproblem.php?pid=4712 Hamming Distance Time Limit: 6000/3000 MS (Java/Other ...

  7. hduoj 4707 Pet 2013 ACM/ICPC Asia Regional Online —— Warmup

    http://acm.hdu.edu.cn/showproblem.php?pid=4707 Pet Time Limit: 4000/2000 MS (Java/Others)    Memory ...

  8. hduoj 4706 Children&#39;s Day 2013 ACM/ICPC Asia Regional Online —— Warmup

    http://acm.hdu.edu.cn/showproblem.php?pid=4706 Children's Day Time Limit: 2000/1000 MS (Java/Others) ...

  9. 2016 ACM/ICPC Asia Regional Qingdao Online 1001/HDU5878 打表二分

    I Count Two Three Time Limit: 3000/1000 MS (Java/Others)    Memory Limit: 32768/32768 K (Java/Others ...

  10. 2016 ACM/ICPC Asia Regional Shenyang Online 1009/HDU 5900 区间dp

    QSC and Master Time Limit: 2000/1000 MS (Java/Others)    Memory Limit: 131072/131072 K (Java/Others) ...

随机推荐

  1. PIE SDK算法的同步调用

    1.    算法功能简介 同步调用一旦开始,调用者必须等到方法调用返回后,才能继续后续的行为. PIE SDK支持算法功能的执行,下面对算法的同步调用功能进行介绍. 2.    算法功能实现说明 2. ...

  2. linux 重新定义命令alias——重定义查看日志命令

    背景:很多时候,需要输入一大串命令来查看日志,例如: cd /home/weblogic/prodmain/log/ftlog;tail -f tps-mv-ft-rolling.log 每次打开终端 ...

  3. CentOS(Linux)主机名字前多了 (base),如何取消和添加

    我们知道IDE中有显示或隐藏某个选项/页面的功能,我们想要修改这个参数,一般都会到设置(settings)中去找.那么与之对应的,Linux上这个终端对应的设置也应该找设置文件. Terminal对应 ...

  4. APP在实际开发中应注意的关键点

    在APP开发过程中,开发者比较注重的是功能模块的实现,从而忽略了APP的设计问题,特别是企业开发APP,但是,APP设计是APP开发中非常重要的一个环节,APP界面设计直接影响到APP用户的感官,因此 ...

  5. kali 安装命令类

    apt-get常用命令:update – 取回更新的软件包列表信息upgrade – 进行一次升级install – 安装新的软件包(注:软件包名称是 libc6 而非 libc6.deb)remov ...

  6. java Folder transform to Source Folder

    右键文件夹然后选择Build Path ===>Use as Source Folder 里面的东西现在就可以编译了 然后想要让一个源码包变成一个文件夹的话: 只需要再次右键源码包==>选 ...

  7. Hash索引和B+树索引总结

    先说Hash索引 在理想的情况下,key非常分散,不存在Hash碰撞的话,采用Hash索引可以唯一得确定一个key的位置,并且这个位置上就只有一个key,所以查找时间复杂度是O(1),非常快,这是Ha ...

  8. 清除浮动clear-left-right-both-none效果

    <!DOCTYPE html> <html> <head> <meta http-equiv="Content-Type" content ...

  9. MySQL关联left join 条件on与where不同

    以下的文章主要讲述的是MySQL关联left join 条件on与where 条件的不同之处,我们现在有两个表,即商品表(products)与sales_detail(销售记录表).我们主要是通过这两 ...

  10. hadoop 天气案例

    对下面一组气温数据进行处理,得到每个月份最高的两个气温值 2018-12-12 14:30 25c2018-12-12 15:30 26c2017-12-12 12:30 36c2019-01-01 ...