![](https://img-blog.csdnimg.cn/20201014180756724.png?x-oss-process=image/resize,m_fixed,h_64,w_64)
贪心
deepquiet
这个作者很懒,什么都没留下…
展开
-
Distant Galaxy(高效)
题意:给出数点,求一个矩阵,使得落在矩阵边界的点最多.发现博客这种东西,要么立刻马上写,要么立刻马上忘.#老年痴呆患者的怒吼##include#includeusing namespace std;const int maxn = 100+10;struct poin { int x, y; bool operator <(const poin& p)const {原创 2016-01-28 00:59:52 · 598 阅读 · 0 评论 -
Soju uvalive5845
题意:点分为两个区,一个区的横坐标小于第二个区,求abs(x1-x2)+abs(y1-y2)的最小值思路:主要思想就是把下标一样的同一到一边,那就要由于x1代码:#include#include#includeusing namespace std;const int maxn = 100005;const int INF = 0x3f3f3f3f;int原创 2016-03-12 15:07:32 · 297 阅读 · 0 评论 -
UVALive - 2689 Cricket Field
题意:求最大空矩阵思路:每遇到一个点就将矩阵分为四块代码:#include#include#include#includeusing namespace std;const int maxn = 1000005;struct node { int x, y, w, h;}arr[maxn];int n, W, H;int main() { int t;原创 2016-03-10 21:37:43 · 245 阅读 · 0 评论 -
Average uvalive4726
题意:输入一个串,求长度至少为k且平均值最大的字串的起始与结束位置思路:首先累加到每个为的总值,然后再枚举所有可能的终点,然后cur为最近的起点,q存储所有的起点,每次存储起点都要达到作为终点的最优#include#include#includeusing namespace std;const int maxn = 100005;int n, l;int sum[maxn原创 2016-03-10 12:39:58 · 291 阅读 · 0 评论 -
Genome Evolution uvalive5052
题意:题目没搞清楚,结果卡了好久题目求a,b连续的数字相同(注意不是顺序相同)的子集的个数思路:第一个串作为模板, 记录每个位置的数字的值,然后第二个串记录每个值的位子,这么做的目的是为了计算在扫描过的模板串内的字母在第二个串内的长度(通过最大最小位置相减)如果长度与模板串相同,那么一定是一样的,即所有在最小位置之前的都不在串内,所有大于最大位置的都不再串内代码:#incl原创 2016-03-08 22:23:35 · 256 阅读 · 0 评论 -
Pie
题意:给出人数,蛋糕数,以及各蛋糕的半径,求每个人能平均分到的最大面积思路:也是求最大值,与assemble类似,用到二分取尽量大的匹配代码:#include#include#include#include#include#includeusing namespace std;const double pi=acos(-1.0);int k, f;double原创 2016-02-04 23:34:47 · 282 阅读 · 0 评论 -
Supermarket
题意:每个商品都有利润和保质期,在保质期内,能够卖出的最高利润.思路:显然最长时间就是所有商品中的最大保质期,时间自然是递减的,然后利用优先队列取出最大利润的商品.枚举截止时间,商品的保质期在截止时间之后的才能入队,为了保证队内的物品不过期,截止时间应从最长时间递减.代码:#include#include#include#includeusing namespace原创 2016-02-04 17:09:39 · 339 阅读 · 0 评论 -
Fabled Rooks
题目:在给定区域内放车,使得所有车在不同行且不同列(无法互相攻击)思路:这个和processor很像,都是在给定范围内安排事件,所以都用到了优先队列,按照前端点优先.这里要提到由于水平和垂直的位置确定不影响,所以分开确定,即一个车的位置确定分两次.同时用m来控制下个元素的最小放置位置,如果某元素的最远范围小于m显然是不行的。#include#inclu原创 2016-02-03 17:56:13 · 361 阅读 · 0 评论 -
Processor(二分搜索,优先队列)
题意:给出n个任务完成区间以及工作量,求出最快处理速度.思路:用二分搜索匹配最优速度,其中还用到优先队列辅助.枚举所有截止时间,在此时间内的都进队,按照工作截止时间越早越先出队,如果截止时间不及枚举的截止时间,则错过代码:#include#include#include#include#includeusing namespace std;const int N原创 2016-02-03 16:11:37 · 302 阅读 · 0 评论 -
uva10534
make a 2*l sequence which is + in 0-l-1 and - in l-2*l-1, and make sure the l is maxmain algorithmkeep a up-going sequence from 0 - n-1 and n-1 - 0, so the d1[i] is the length of up-going sequen原创 2016-03-12 20:48:41 · 212 阅读 · 0 评论 -
uva714
题目:题目的意思就是给出m个数,分成k组,只能连续的分成一组。求分组中和的最大值最小。思路:二分枚举最大值,然后划分的每一组尽量接近这个枚举的值,最大值尽量小。这道题的核心部分是二分枚举,贪心主要体现在尽量靠近枚举的值原创 2017-03-15 16:29:51 · 513 阅读 · 0 评论 -
uva11129
题目: 构造一个任意子串都不是等差序列的序列 思路: 隔两位存储,分成13572468类型的串,然后切半进行相同操作就一定不会等差#include<cstdio>#include<algorithm>#include<string>#include<cstring>#include<iostream>using namespace std;int n;const int maxn原创 2017-03-16 16:51:54 · 310 阅读 · 0 评论 -
uva11100
题目大意: 有几个包裹,包裹之间是有互相包含关系的,求最少的箱子数可以将所有包裹都放进去。思路: 最多的重复个数k就需要几个箱子,因为相同的之间是不可以相互包含的。将包裹进行排序,然后从一个数i,每加K就是放在同一个箱子中的,照着这个样子输出就可以了。代码:#include<cstdio>#include<algorithm>#include<cstring>#include<iost原创 2017-03-16 16:27:28 · 282 阅读 · 0 评论 -
uva10041
题目意思就是给出有几个人,每个人之间的距离多少。然后问到每个人距离最小可以使多少。 把所有距离排个序,中间那个就是我们要求的位置。然后循环算个距离。#include<cstdio>#include<iostream>#include<cmath>#include<algorithm>#include<cstring>using namespace std;const int maxn原创 2017-03-16 16:26:39 · 293 阅读 · 0 评论 -
uva993
题目:给你一个整数n,求一个数m,使得m的每个位数的乘积是n,求最小的m。 从9开始除(位数越少越小),知道除不尽或者完全除完#include<cstdio>#include<iostream>#include<algorithm>#include<cstring>#include<string>using namespace std;int arr[1005];int main()原创 2017-03-16 16:08:31 · 261 阅读 · 0 评论 -
uva10720
题目的意思就是给你n个点,然后给出每个点的度数,问能不能构成图;首先我们把点的度数从大到小排序,然后看看最大的度数是几,假如是k,那如果剩下的没有k个点,就不能构成图,有的话度数大的接下k个点度数都减一,如果有度数变为负数了,那也不能构成。然后除掉第一个点,剩下的排序,重复上面的步骤,到最后一个点,如果度数是0那就对了,不是的话也不能构成图;#include#include#i原创 2017-03-16 15:46:21 · 279 阅读 · 0 评论 -
uva10670
公司要你要完成N份任务,但是你是不可能全部完成的,所以需要雇佣别人来做,做到剩下M份时,自己再亲自出马。现在有个机构,有两种付费方式,第一种是每付A元帮你完成1份,第二种是每付B元帮你完成剩下任务的一半。#include<cstdio>#include<cstring>#include<iostream>#include<algorithm>using namespace std;cons原创 2017-03-16 15:45:54 · 209 阅读 · 0 评论 -
贪心算法整理
贪心原创 2017-03-16 15:41:15 · 1625 阅读 · 0 评论 -
uva10602
选出一个输入顺序,使得输入的次数最少,即前一个字符串与后一个字符串重合的地方可以不打(从头开始,连续的),计算输入次数,并打出输入顺序思路:输入顺序就是qsort按strcmp排序的方法,按字典集,其次短的在前代码:#include#include#include#include#includeusing namespace std;int n;char s[105]原创 2017-03-15 19:14:41 · 168 阅读 · 0 评论 -
Keep the Customer Satisfied
题意:给出n个任务的耗时和截止时间,求最多可接几单思路:类似的题目这几天都在做,所以很自然想到优先队列,wa了一发,原因是输出之间没有换行先按照截止时间从小到大入队,然后耗时越多的越先出队代码:#include#include#include#include#include#includeusing namespace std;const int maxn = 1原创 2016-02-04 15:47:39 · 354 阅读 · 0 评论 -
Installations
题意:给出n个工作的耗时以及截止时间,每个时刻只完成一样工作,求超时最大的两个任务最少超出时间.思路:一看到截止时间就想到优先队列,后来发现不适用,题目是求最大值最小.首先先按照最早截止时间排序,即截止时间越早优先级越高,如此先求出超时,同时保留罚时最大的值得下标,然后在暴力枚举此下标以前的所有任务,用意在将任务后调,看最大罚时的两个任务罚时是否会有所减少.即将枚举的任务放于第原创 2016-02-04 14:54:52 · 255 阅读 · 0 评论 -
Open Credit System
题意:给一个序列,求ai-aj(i>j)的最大值思路:不断更进ai使得ai为最大,也不断更进最大值,注意要先更进最大值.代码:#include#include#include#includeusing namespace std;int n;int maxn, ans;int score[100005];int main() { int kase; int原创 2016-02-05 20:17:59 · 897 阅读 · 0 评论 -
Fill the Square
题意:填满一个正方形,使得任意相邻的字母不同且字典序最小思路:当遇到待填写的位置是,按字典序选择字母判断其四周是否有重,没有就选定这个字母代码:#include#include#include#includeusing namespace std;int n;char gird[15][15];char fill(int i, int j) { char a =原创 2016-02-05 20:11:04 · 329 阅读 · 0 评论 -
Priest John's Busiest Day
题意:给出婚礼场数和起始s结束d时间,思议每场婚礼多于主持一半时间,问能否全部主持思路:主持时间要尽量少成功的几率才高,所以主持时间就定为s-d/2+1结构体存储起始时间结束时间以及主持时间,然后根据起始时间+主持时间排序(理想结束时间)最后要注意的是每段主持时间要加的是起始时间以及耗时的较大者,耗时如果超过结束时间则不可完成代码:#include#include#原创 2016-02-05 19:48:51 · 237 阅读 · 0 评论 -
City Game
题意:求最大子矩阵,求其面积*3思路:暴力枚举,每行都统计一次最大面积,由于某个点经过了左右的扫描,所以面积为 (righ[i][j]-lef[i][j]+1)*up[i][j]代码:#include#include#includeusing namespace std;const int maxn = 1000+10;int n, m;int mat[maxn原创 2016-02-05 16:01:41 · 323 阅读 · 0 评论 -
Subsequence
题意:求N个整数中相加的S的最少个数思路:a[i]表示前i个数的和,然后枚举终点,当遇到a[j-1]=s时累加j直到i-j最短,记录最小值代码:#include#include#includeusing namespace std;int s, n;int a[100005];int main() { int t; while(scanf("%d%d", &n,原创 2016-02-05 15:45:13 · 329 阅读 · 0 评论 -
Spreading the Wealth
题目:n个人围成一圈,传递现有金额,是所有人平均.思路:对于第一个人, 有A1-x1+x2=average;对于第二个人,有A2-x2+x3=average;其中,x1, x2, x3,为相应的人分配出去的量.那么可以推出:x2 = average-A1+x1=x1-c1,c1=A1-average;x3=average-A2+x2=2average-A1-A2+x原创 2016-01-28 16:06:30 · 282 阅读 · 0 评论 -
Commando War uva11729(贪心)
题意:给部下分配任务,需要交代时间以及完成时间,部下可同时完成任务.思路:先按照执行时间排序,然后枚举所有的任务,用sum累加所有的交代时间,(因为任务可以同时完成,而交代时间不行)然后加上当前需考虑的任务完成时间是否超当前做大值,超过就替换.代码:#include#include#includeusing namespace std;struct node {原创 2016-01-28 15:03:55 · 384 阅读 · 0 评论 -
Dragon of Loowater(贪心)
题意:聘请能力值大于等于恶龙的骑士杀恶龙,按照能力值付金币,使金币尽量少.水题,一键sort.#include#include#includeusing namespace std;int dra[20005];int kni[20005];int n, m;int main() { while(scanf("%d%d", &n, &m) != EOF && n && m) {原创 2016-01-28 14:38:47 · 275 阅读 · 0 评论 -
Beijing Guards
题意:有n个人围成一个圈,给第i个ri个礼物,且相邻的人礼物不重,求最少礼物种类思路:如果n为偶数,那么最大值是相邻的两值相加的最大如果n为奇数,那么用二分法确定最小值,判断原则:将资源分为左边和右边两堆首先左边分配t[0]个,也就是t[0]全部左取,然后奇数号取左,不足的右补(m-t[0]),偶数号右取,这样第n个人取得是右边,如果右边剩余不足左取的话,那就是不行原创 2016-02-05 20:50:54 · 353 阅读 · 0 评论 -
Garbage Heap
题意:求一个三维矩阵的最大连续矩阵.之前有遇到类似的但没有去做,今天终于做了.由于空间几何很差,理解了很久.代码:#include#include#includeusing namespace std;const int maxn = 30;const long long INF = 0x3f3f3f3f3f3f3f;int x, y, z;long long g[m原创 2016-01-29 17:03:02 · 241 阅读 · 0 评论 -
Graveyard
题意:在一个周长10000的圆上等距分布n个雕塑,现加入m个,求原先雕塑的最小移动距离思路:如果加入的雕塑是n的倍数,那自然不用移动,如果不是,那就求出间距,从一个旧雕塑出发(至少一个不要动)然后逐个选择移动的最小距离。代码:#include#include#includeconst double len = 10000;int n, m;int main() {原创 2016-02-03 21:01:29 · 399 阅读 · 0 评论 -
Piotr's Ants
题意:一个水平面,给出n只蚂蚁的速度和方向,求一定时间后各蚂蚁的位置和方向思路:蚂蚁相撞后是会掉头的,所以从始至终他们相对的大概位置不会变,那么一开始排在前面的蚂蚁如果没掉下去还是在前面,turing表示正在碰撞,所以用一个order数组存第i号蚂蚁在第几位,最后用after存蚂蚁运动后的状态,由于排过序,所以下标就是第几位,最后依据order逐号求出蚂蚁的状态。#includ原创 2016-02-03 20:52:44 · 350 阅读 · 0 评论 -
The Trip, 2007
题意:将所有包归为几堆,每堆包大小不重,求最少分堆的方式。思路:既求最少分堆且每个堆没有大小一样的包,那么堆数至少得是最大包重复量,取包时,隔最大重复数绝不会重(排好序后)代码:#include#includeusing namespace std;const int maxn = 10005;int b[maxn];int main() { int n, firs原创 2016-02-03 20:18:55 · 572 阅读 · 0 评论 -
Watering Grass
题意:给出草坪的长宽和各洒水器的射程,求最少的放置数。思路:由于要填满,所以洒水器的射程只能取正方形。在确定的起点范围内取射程最大,然后调整起点。代码:#include#include#includeusing namespace std;double l, w, p, r;double cal() { return sqrt(r*r-w*w/4.0);}原创 2016-02-03 20:11:05 · 394 阅读 · 0 评论 -
DNA Consensus String
题意:找到一个dna序列,使得所有脱氧核糖核酸到给定的脱氧核糖核酸(讲真,输入法自带翻译)变化得最少思路:受中位数思想的影响,觉得就是找到里面的一个脱氧核糖核酸序列,使得其他序列到他的变化对称,可是没法操作。看了题解,发现就是逐位找到出现最多此的那个,代码很简单。不过由于是逐位比较,所以其实是竖着存储的。#include#includeusing namespace std原创 2016-02-03 18:19:48 · 1159 阅读 · 1 评论 -
Knowledge for the masses
tip:first from left to right, then from right to left, keep the smaller of the spending when during that, and save every position's possible waycode:#include#include#include#includeusing nam原创 2016-03-15 22:25:33 · 402 阅读 · 0 评论 -
Slalom
题意:给出每个门起点,高度和横向长度以及滑板的垂直速度,水平速度恒定,求出能取的最快滑板速度.思路:二分确定最快速度,由于门的高低递增,所以检查速度是否可行时从后往前,看通过下个门的高度临界值时是否可以通过门.代码:#include#include#includeusing namespace std;int w, v, n;struct door { double x原创 2016-02-03 17:29:10 · 358 阅读 · 0 评论 -
Hackers' Crackdown
题意:把n个集合分成尽量多组,使每组中所有集合的并集为全集.#include#include#include#includeusing namespace std;const int maxn = 1<<17;int ans[maxn], cover[maxn];int node[20];int n;int main() { int C=0; while(scan原创 2016-01-29 19:43:00 · 417 阅读 · 0 评论 -
uva10700
题意:给出只包含数字和+*的表达式,你可以自己安排每一个运算的顺序,让你找出表达式可能得到的最大值和最小值。代码:#include<cstdio>#include<iostream>#include<algorithm>#include<cstring>#include<string>using namespace std;string s;long long num1[20];lo原创 2017-04-05 00:33:04 · 347 阅读 · 0 评论