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中实现进度条的多种方法总结

《Python中实现进度条的多种方法总结》在Python编程中,进度条是一个非常有用的功能,它能让用户直观地了解任务的进度,提升用户体验,本文将介绍几种在Python中实现进度条的常用方法,并通过代码... 目录一、简单的打印方式二、使用tqdm库三、使用alive-progress库四、使用progres

Android数据库Room的实际使用过程总结

《Android数据库Room的实际使用过程总结》这篇文章主要给大家介绍了关于Android数据库Room的实际使用过程,详细介绍了如何创建实体类、数据访问对象(DAO)和数据库抽象类,需要的朋友可以... 目录前言一、Room的基本使用1.项目配置2.创建实体类(Entity)3.创建数据访问对象(DAO

Java向kettle8.0传递参数的方式总结

《Java向kettle8.0传递参数的方式总结》介绍了如何在Kettle中传递参数到转换和作业中,包括设置全局properties、使用TransMeta和JobMeta的parameterValu... 目录1.传递参数到转换中2.传递参数到作业中总结1.传递参数到转换中1.1. 通过设置Trans的

C# Task Cancellation使用总结

《C#TaskCancellation使用总结》本文主要介绍了在使用CancellationTokenSource取消任务时的行为,以及如何使用Task的ContinueWith方法来处理任务的延... 目录C# Task Cancellation总结1、调用cancellationTokenSource.

HarmonyOS学习(七)——UI(五)常用布局总结

自适应布局 1.1、线性布局(LinearLayout) 通过线性容器Row和Column实现线性布局。Column容器内的子组件按照垂直方向排列,Row组件中的子组件按照水平方向排列。 属性说明space通过space参数设置主轴上子组件的间距,达到各子组件在排列上的等间距效果alignItems设置子组件在交叉轴上的对齐方式,且在各类尺寸屏幕上表现一致,其中交叉轴为垂直时,取值为Vert

学习hash总结

2014/1/29/   最近刚开始学hash,名字很陌生,但是hash的思想却很熟悉,以前早就做过此类的题,但是不知道这就是hash思想而已,说白了hash就是一个映射,往往灵活利用数组的下标来实现算法,hash的作用:1、判重;2、统计次数;

认识、理解、分类——acm之搜索

普通搜索方法有两种:1、广度优先搜索;2、深度优先搜索; 更多搜索方法: 3、双向广度优先搜索; 4、启发式搜索(包括A*算法等); 搜索通常会用到的知识点:状态压缩(位压缩,利用hash思想压缩)。

usaco 1.3 Barn Repair(贪心)

思路:用上M块木板时有 M-1 个间隙。目标是让总间隙最大。将相邻两个有牛的牛棚之间间隔的牛棚数排序,选取最大的M-1个作为间隙,其余地方用木板盖住。 做法: 1.若,板(M) 的数目大于或等于 牛棚中有牛的数目(C),则 目测 给每个牛牛发一个板就为最小的需求~ 2.否则,先对 牛牛们的门牌号排序,然后 用一个数组 blank[ ] 记录两门牌号之间的距离,然后 用数组 an

git使用的说明总结

Git使用说明 下载安装(下载地址) macOS: Git - Downloading macOS Windows: Git - Downloading Windows Linux/Unix: Git (git-scm.com) 创建新仓库 本地创建新仓库:创建新文件夹,进入文件夹目录,执行指令 git init ,用以创建新的git 克隆仓库 执行指令用以创建一个本地仓库的

poj 3190 优先队列+贪心

题意: 有n头牛,分别给他们挤奶的时间。 然后每头牛挤奶的时候都要在一个stall里面,并且每个stall每次只能占用一头牛。 问最少需要多少个stall,并输出每头牛所在的stall。 e.g 样例: INPUT: 51 102 43 65 84 7 OUTPUT: 412324 HINT: Explanation of the s