![](https://img-blog.csdnimg.cn/20201014180756724.png?x-oss-process=image/resize,m_fixed,h_64,w_64)
贪心算法
accosmos
这个作者很懒,什么都没留下…
展开
-
贪心算法
1.背包相关问题部分背包问题 有n个物体,第i个物体的重量为wi,价值为vi。在总重量不超过c的情况下让总价值尽量高。分析:贪心算法,只顾眼前,选取价值最大且相对较轻的物体,所以可以用“价值/重量”来选择,结果从大到小,直到重量超过c。乘船问题 有n个人,第i个人重量为wi。每艘船的最大载重量均为c,且最多只能乘2个人。用最少的船装载所有人。分析:i表示最轻的人,j表示最重的人,j...原创 2019-02-02 12:59:56 · 349 阅读 · 0 评论 -
uva1153
题意:已知有n个工作,已知每个工作需要的工作时间qi和截至时间di,工作只能串行完成,问最多能完成多少个工作分析:贪心,先按截止时间排序,建优先级队列,主要是要取出截止时间大,需要时间大的工作,每次加入队列时要进行比较,比队列中截止时间最长的队列的需要时间少,并且能在规定时间做完,则加入队列,因为刚加入的截止时间又大,需要时间又小,比起队列中最大的,肯定是刚加入的更好了。#include...原创 2019-02-21 08:35:11 · 224 阅读 · 0 评论 -
uva1615
题意:给定平面上n个点,和一个值,要求在x轴上找到最少的点,使得对于给定的每个点,都能选出和它欧几里得距离不超过d的点分析:贪心,从左向右,每次都找欧几里得最大的。#include<iostream>#include<string.h>#include<sstream>#include<set>#include<algorit...原创 2019-02-21 07:26:59 · 197 阅读 · 0 评论 -
uva1614
题意:输入一个长度为n的序列a,满足1<=ai<=i,要求确定每个数的正负号,使得所有数的总和为0。分析:和为奇数肯定是不能,一开始想法是找序列中最大和第2大的数,然后相减,再加入队列,重复此过程,就是Huffman编码。但是其实并不需要这样,求出能加到序列和的一半的序列就好了。#include<iostream> #include<cstring>...原创 2019-02-21 06:37:11 · 306 阅读 · 0 评论 -
uva1613
题意:输入一个n(3=<n<=9999)个点m条边(2=<m<=100000)的连通图,n保证为奇数,设k为最小的奇数。使得每个点 的度数不超过k,你的任务是给每个点涂色,使得相邻两点颜色不同。分析:贪心,将涂色的点周围点都列出来,找没被涂色最小的点。#include<iostream>#include<string.h>#includ...原创 2019-02-20 15:42:47 · 233 阅读 · 0 评论 -
uva1612
题意:有 n 位选手参加编程比赛。比赛有3道题目,每个选手的每道题目都有一个评测之前的预得分(这个分数和选手提交程序的时间相关,提交的越早,预得分越大)。接下来 是系统评测。如果某道题未通过测试,则改题的实际得分为0分,否则得分等于预得分。得分相同的选手,ID小的排在前面。问是否能给出所有3n个得分以及最后的实际名次。如果可能,输出最后一名的最高可能得分。每个预得分均为小于1000的非...原创 2019-02-19 23:34:43 · 229 阅读 · 0 评论 -
uva11536
题意:给定一个序列,找出包含1到k的元素的最短序列,序列定义是X0=1,X1=2,X2=3,Xk=(Xk-1+Xk-2+Xk-3)%m+1。分析:滑动窗口,先找出包含这k个值的最大序列,然后将序列缩小,找到之后就取出一个先前加入的元素,寻找下一个。#include <stdio.h>#include <string.h>#include <algo...原创 2019-02-24 09:17:26 · 257 阅读 · 0 评论 -
uva1617
题意:有n条长度为1的线段,现给出它们的区间,找出它们的位置,使得它们间的空隙数目最小分析:贪心,按r,l进行排序,从左向右找,每次都取最右端,若r大于当前最后一个就可以放在r+1,r等于当前,那么当前的可以放在r-1的位置,r就放在r的位置,l大于当前最后一个,那么表示不相交,肯定有一个空隙#include<iostream>#include<string.h>...原创 2019-02-23 06:56:54 · 226 阅读 · 0 评论 -
uva10366
题意:给出l和r,然后从l坐标到r坐标每隔两个位置有一个档板,给出挡板的高度,然后想(-1, 1)中间加水,问什么时候会溢出。分析:只看一段区间的最大板块 for (int i = q; y[i] <= L; i++) { k += tmp; tmp = max(tmp, y[i+1]); }这种方法很精妙,我想复杂了。#include...原创 2019-02-27 22:29:26 · 205 阅读 · 0 评论 -
uva1623
分析:找出当前下雨天之前的最后一个满湖的位置,从当前开始找不下雨天。#include<iostream>#include<string.h>#include<sstream>#include<set>#include<algorithm>#include<vector>#include<map>原创 2019-02-27 14:25:54 · 226 阅读 · 0 评论 -
UVA - 1606 Amphiphilic Carbon Molecules
题意:平面上有n个点n<=1000,分为黑白两个点,用一条线分开,使得两边两个点(只能单独取黑或白)最大。分析:这题首先肯定是用枚举,涉及到角度精确的问题,和巨人与鬼很相似。参考了作者的方法,还是orz。 int L = 0, R = 0, cnt = 2; while(L < k) { if(R == L) { R = (R+1)%k; cnt++; }...原创 2019-02-15 17:12:25 · 136 阅读 · 0 评论 -
uva-11134
题意:指定n个矩形,并在每个矩形里面放一个战车,要求战车不能相互攻击。分析:贪心算法,将二维坐标分解成两个一维x,y。分别找出x,y不会重合的部分。#include<iostream>#include<string.h>#include<sstream>#include<algorithm>#include<vector>...原创 2019-02-15 15:17:10 · 317 阅读 · 0 评论 -
UVA1622
题意:有一个n*m的网格,每个格子里有一个机器人,每次可以发出north,south,east,west,指令,使得所有机器人朝一个方向移动,走出网格就不能继续执行指令,求出机器人的最大指令执行数量。分析:题目不难,但是要考虑的因素有很多,很可能考虑不周全。想出来要先判断走东西还是南北,并且要模拟走东西和南北那个走的次数总和最大,这个模拟不能直接算出上下或左右最少的走完了的数量,因为它下面...原创 2019-02-27 10:23:56 · 346 阅读 · 0 评论