ACM贪心总结

2024-09-04 22:58
文章标签 总结 贪心 acm

本文主要是介绍ACM贪心总结,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

贪心法是一种解决问题的策略。如果策略正确,那么贪心法往往是易于描述,易于实现的。选择策略最关键的是读懂题,翻译能力和抽象能力。 如果不能提取有用的信息那么往往会将问题复杂化最后那自己绕进去。 贪心再进行操作前多会用sort排序或结构体然后对结构体的一个成员排序 根据其他成员的关系求解。

多机调度问题(上次列举了其中一种情况)
n个作业组成的作业集,可由m台相同机器加工处理。要求给出一种作业调度方案,使所给的n个作业在尽可能短的时间内由m台机器加工处理完成。作业不能拆分成更小的子作业;每个作业均可在任何一台机器上加工处理。当n<=m时,只要将作业时间区间分配给作业即可;当n>m时,首先将n个作业从大到小排序,然后依此顺序将作业分配给空闲的处理机。也就是说从剩下的作业中,选择需要处理时间最长的,然后依次选择处理时间次长的,直到所有的作业全部处理完毕,或者机器不能再处理其他作业为止。如果我们每次是将需要处理时间最短的作业分配给空闲的机器,那么可能就会出现其它所有作业都处理完了只剩所需时间最长的作业在处理的情况,这样势必效率较低

#include<iostream>    
#include<algorithm>      
using namespace std;    
int speed[10010];    
int mintime[110];    bool cmp( const int &x,const int &y)    
{    return x>y;    
}    int main()    
{    int n,m;           memset(speed,0,sizeof(speed));    memset(mintime,0,sizeof(mintime));    cin>>n>>m;    for(int i=0;i<n;++i) cin>>speed[i];    sort(speed,speed+n,cmp);    for(int i=0;i<n;++i)     {   *min_element(mintime,mintime+m)+=speed[i];     }     cout<<*max_element(mintime,mintime+m)<<endl;   
}  

区域覆盖问题在这里插入图片描述

Assume the coasting is an infinite straight line. Land is in one side of coasting, sea in the other. Each small island is a point locating in the sea side. And any radar installation, locating on the coasting, can only cover d distance, so an island in the sea can be covered by a radius installation, if the distance between them is at most d.
We use Cartesian coordinate system, defining the coasting is the x-axis. The sea side is above x-axis, and the land side below. Given the position of each island in the sea, and given the distance of the coverage of the radar installation, your task is to write a program to find the minimal number of radar installations to cover all the islands. Note that the position of an island is represented by its x-y coordinates.
Figure A Sample Input of Radar Installations
Input
The input consists of several test cases. The first line of each case contains two integers n (1<=n<=1000) and d, where n is the number of islands in the sea and d is the distance of coverage of the radar installation. This is followed by n lines each containing two integers representing the coordinate of the position of each island. Then a blank line follows to separate the cases.
The input is terminated by a line containing pair of zeros
Output
For each test case output one line consisting of the test case number followed by the minimal number of radar installations needed. “-1” installation means no solution for that case.

#include <iostream>
#include <algorithm>
#include <math.h>
using namespace std;
struct yuan
{double l,r;
}a[1000000];
int cmp(yuan a,yuan b)
{return a.r<b.r;
}
int main()
{int m,n,c,d,p=0,s=0,o=0;double k;while(cin>>m>>n){p=0;o++;if(m==0&&n==0){break;}for(int i=0;i<m;i++){cin>>c>>d;if(d>n){p=1;}a[i].l=c-double(sqrt(n*n-d*d));//根据圆心计算出小岛在海岸线上的范围a[i].r=c+double(sqrt(n*n-d*d));}sort(a,a+m,cmp);//根据右区间的左标排序k=a[0].r,s=1;for(int i=1;i<m;i++){if(a[i].l>k){k=a[i].r;s++;//判断是否有重叠}}if(p==1)cout<<"Case "<<o<<": "<<-1<<endl;elsecout<<"Case "<<o<<": "<<s<<endl;}return 0;
}

北京大学的许多研究生住在万柳校区,距离主校区 - 盐源4.5公里。万柳的学生必须乘坐公共汽车或骑自行车去学校。由于北京交通不畅,许多学生选择骑自行车。
我们可以假设除了“查理”以外的所有学生都以固定的速度从万柳到盐源。查理是一个有不同骑乘习惯的学生 - 他总是试图跟随另一个骑手,以避免单独骑车。当查理到达万柳大门时,他会找一个正在前往盐源的人。如果他找到某人,他将跟随那个骑手,如果没有,他会等待有人跟随。在从万柳到盐源的路上,如果一个更快的学生超过查理,他将随时离开他跟随的骑手并加快跟随更快的速度。我们假设查理到万柳门的时间是零。考虑到其他学生的出发时间和速度,你的任务是给Charley到达Yanyuan的时间。输入有几个测试用例。每种情况的第一行是N(1 <= N <= 10000),表示骑手的数量(不包括查理)。 N = 0结束输入。以下N行是N种不同骑手的信息,格式如下:Vi [TAB] Ti Vi是一个正整数<= 40,表示第i个骑手的速度(kph,每小时公里数)。 Ti是第i个骑手的起飞时间,它是一个整数并以秒为单位计算。在任何情况下都确保始终存在非负Ti。产量每个案例输出一行:查理的到达时间。在处理分数时向上舍入(上限)值。

这个题如果用模拟的办法将会非常复杂要考虑每次查理被超越时速度更换和每一次有人从出发到追上查理的时间(自己想着想着就把自己绕了进去)到了最后才知到,查理到达目标地点总是与最快的人时间相同。出发时间比查理早速度比查理快的查理是追不到的只需要先按时间排序先遍历将出发比查理晚速度比他慢的人删除 (也就是说查理就跟着耗时最短的)不多说了上代码。

#include <iostream>
#include <queue>
#include <algorithm>
#include <vector>
#include <cmath>
using namespace std;
int main()
{int j,q=0,s=0;double m,n,a,b;double k=4.5,c,d;while(cin>>m){if(m==0){break;}c=360000;for(int i=0;i<m;i++){cin>>a>>b;if(b>=0){s=ceil(4.5*3600/a)+b;   //从初发到终点的时间if(s<c){c=s;}}}cout<<ceil(c)<<endl;}
}

这篇关于ACM贪心总结的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/1137276

相关文章

Python中logging模块用法示例总结

《Python中logging模块用法示例总结》在Python中logging模块是一个强大的日志记录工具,它允许用户将程序运行期间产生的日志信息输出到控制台或者写入到文件中,:本文主要介绍Pyt... 目录前言一. 基本使用1. 五种日志等级2.  设置报告等级3. 自定义格式4. C语言风格的格式化方法

Spring 依赖注入与循环依赖总结

《Spring依赖注入与循环依赖总结》这篇文章给大家介绍Spring依赖注入与循环依赖总结篇,本文通过实例代码给大家介绍的非常详细,对大家的学习或工作具有一定的参考借鉴价值,需要的朋友参考下吧... 目录1. Spring 三级缓存解决循环依赖1. 创建UserService原始对象2. 将原始对象包装成工

MySQL中查询和展示LONGBLOB类型数据的技巧总结

《MySQL中查询和展示LONGBLOB类型数据的技巧总结》在MySQL中LONGBLOB是一种二进制大对象(BLOB)数据类型,用于存储大量的二进制数据,:本文主要介绍MySQL中查询和展示LO... 目录前言1. 查询 LONGBLOB 数据的大小2. 查询并展示 LONGBLOB 数据2.1 转换为十

在Java中实现线程之间的数据共享的几种方式总结

《在Java中实现线程之间的数据共享的几种方式总结》在Java中实现线程间数据共享是并发编程的核心需求,但需要谨慎处理同步问题以避免竞态条件,本文通过代码示例给大家介绍了几种主要实现方式及其最佳实践,... 目录1. 共享变量与同步机制2. 轻量级通信机制3. 线程安全容器4. 线程局部变量(ThreadL

Spring Boot 与微服务入门实战详细总结

《SpringBoot与微服务入门实战详细总结》本文讲解SpringBoot框架的核心特性如快速构建、自动配置、零XML与微服务架构的定义、演进及优缺点,涵盖开发环境准备和HelloWorld实战... 目录一、Spring Boot 核心概述二、微服务架构详解1. 微服务的定义与演进2. 微服务的优缺点三

Java通过驱动包(jar包)连接MySQL数据库的步骤总结及验证方式

《Java通过驱动包(jar包)连接MySQL数据库的步骤总结及验证方式》本文详细介绍如何使用Java通过JDBC连接MySQL数据库,包括下载驱动、配置Eclipse环境、检测数据库连接等关键步骤,... 目录一、下载驱动包二、放jar包三、检测数据库连接JavaJava 如何使用 JDBC 连接 mys

JavaSE正则表达式用法总结大全

《JavaSE正则表达式用法总结大全》正则表达式就是由一些特定的字符组成,代表的是一个规则,:本文主要介绍JavaSE正则表达式用法的相关资料,文中通过代码介绍的非常详细,需要的朋友可以参考下... 目录常用的正则表达式匹配符正则表China编程达式常用的类Pattern类Matcher类PatternSynta

SQL中JOIN操作的条件使用总结与实践

《SQL中JOIN操作的条件使用总结与实践》在SQL查询中,JOIN操作是多表关联的核心工具,本文将从原理,场景和最佳实践三个方面总结JOIN条件的使用规则,希望可以帮助开发者精准控制查询逻辑... 目录一、ON与WHERE的本质区别二、场景化条件使用规则三、最佳实践建议1.优先使用ON条件2.WHERE用

Nginx Location映射规则总结归纳与最佳实践

《NginxLocation映射规则总结归纳与最佳实践》Nginx的location指令是配置请求路由的核心机制,其匹配规则直接影响请求的处理流程,下面给大家介绍NginxLocation映射规则... 目录一、Location匹配规则与优先级1. 匹配模式2. 优先级顺序3. 匹配示例二、Proxy_pa

Android学习总结之Java和kotlin区别超详细分析

《Android学习总结之Java和kotlin区别超详细分析》Java和Kotlin都是用于Android开发的编程语言,它们各自具有独特的特点和优势,:本文主要介绍Android学习总结之Ja... 目录一、空安全机制真题 1:Kotlin 如何解决 Java 的 NullPointerExceptio