【贪心】
张松超
这个作者很懒,什么都没留下…
展开
-
NSWOJ ~ 1110 ~ 会场安排问题(贪心)
1110 - 会场安排问题时间限制:3秒 内存限制:128兆题目描述学校的小礼堂每天都会有许多活动,有时间这些活动的计划时间会发生冲突,需要选择出一些活动进行举办。小刘的工作就是安排学校小礼堂的活动,每个时间最多安排一个活动。现在小刘有一些活动计划的时间表,他想尽可能的安排更多的活动,请问他该如何安排。输入第一行是一个整型数m(m每组测试数据的第一行是一原创 2017-04-06 15:12:36 · 433 阅读 · 0 评论 -
Codeforces ~ 1009C ~ Annoying Present (贪心)
题意一个长度为n的数组(初始全为0),进行m次操作。操作:给你x,d,你任意挑选一个 i (1~n),每个数字加上 x+|i-j|*d( j 表示对应数字的下标)问m次操作后的最大算术平均值为多少?题解首先对于x,每次数组的和sum都增加n*x。(Σ|i-j|)*d跟我们选的 i 有关系,如果d>0,我们就让 Σ|i-j| 尽量大,如果d<0,我们就让 Σ|i-j| 尽量小。Σ|i-j...原创 2018-07-15 03:01:47 · 906 阅读 · 0 评论 -
Codeforces ~ 1008B ~ Turn the Rectangles(水,贪心)
题意有n个长方形,给你他的w和h,问不改变顺序,能不能通过旋转长方形(即交换w和h),使得这n个长方形的w单调非递增。题解贪心的每次使得长方形的w较大就好了。#include <bits/stdc++.h>using namespace std;const int INF = 0x3f3f3f3f;int n;int main(){ scanf("%d", &...原创 2018-07-14 15:43:53 · 300 阅读 · 0 评论 -
Codeforces ~ 1003D ~ Coins and Queries(贪心)
题意n个硬币,q次询问。第二行给你n个硬币的面值(保证都是2的次幂!)。每次询问组成b块钱,最少需要多少个硬币?题解因为所有数字都是2的次幂,所以不存在我们选了C,而无法选B导致错过正确答案的情况。明白这一点之后就是个贪心了,从最大的往下贪心的选即可。因为数比较大,所以我们可以用map来统计某个数字出现的次数。#include <bits/stdc++.h>using namespa...原创 2018-07-05 16:15:22 · 626 阅读 · 0 评论 -
CodeForces ~ 998C ~ Convert to Ones (思维 + 贪心)
题意一个长度为n的二进制串,有两种操作:A:将某一段反序,花费为x。 B:将某一段取反,花费为y。问将这个串全都变为1的最小花费为多少?题解首先对于001100这种情况我们可以通过一次A操作变为110000,同理对于相邻的两个0的段,我们可以通过一次A操作把他们变为一段0。假设0的段数为cnt,①如果x<=y,那么我们就进行cnt-1次A操作和一次B操作即可。②如果x>y,那么我们就进...原创 2018-07-04 12:14:21 · 427 阅读 · 0 评论 -
Codeforces ~ 1006B ~ Polycarp's Practice(贪心 + 模拟)
题意将一个长度为n的数组划分为k段,每段的最大值加起来的和最大为多少,怎么划分输出每段多长(任意解)?思路选最大的k个数字相加就是答案,怎么划分,我们可以把他们的下标存一下,然后根据下标求出段长就OK了。#include &lt;bits/stdc++.h&gt;using namespace std;const int MAXN = 2005;int n, k;pai...原创 2018-07-17 10:26:23 · 623 阅读 · 0 评论 -
CodeForces ~ 998B ~ Cutting (贪心)
题意给你n个数字,保证奇数个数和偶数个数相等。你可以把该序列分割成(连续的)片段,使得每一段的奇数和偶数个数相等,假设在x和y元素中间分割,那么花费|x-y|块钱。你有k块钱,最多可以分割多少次?题解从开头统计奇数和偶数的个数,如果某个位置奇数和偶数个数相等就把当前这个花费放入set中,然后贪心的选择最小的即可。#include <bits/stdc++.h>using namesp...原创 2018-07-04 09:34:16 · 475 阅读 · 0 评论 -
CodeForces ~ 994B ~ Knights of a Polygonal Table (贪心)
题意有N个骑士,武力值为p[i],拥有c[i]个金币,每个骑士最多杀死k个武力值比他低的骑士,问每个人能获得的最多的金币数为多少?思路:按武力值排序,贪心击杀≤k个武力值低于自己且金币数最多的骑士即可。#include <bits/stdc++.h>using namespace std;const int MAXN = 1e5+5;typedef lon...原创 2018-06-27 13:22:43 · 374 阅读 · 0 评论 -
POJ ~ 2454 ~ Jersey Politics (贪心 + 随机化算法)
题意:给你k,然后给你3*k个数编号为(1~3*k),将它们分成三分,每份k个数,要求至少有两份之和大于500*k,输出他们的编号,前两份的和大于500*k。思路:玄学题+1!我们肯定挑选最大的2*k个数字,然后对他们进行合理的分配使得两份都大于500*k。随机第一份中的一个位置,随机第二份中的一个位置,然后交换他们,直到两份之和都满足要求。直接DFS+剪枝超时。//#include <bi...原创 2018-04-18 17:22:13 · 679 阅读 · 0 评论 -
CodeForces ~ 996E ~ Leaving the Bar (贪心 + 随机化)
题意给你n个向量,你可以改变他们的符号,使得这些向量之和的长度小于1.5e6。思路由于每个向量的模小于r=106r=106r=10^6,我们可以通过调整符号使得两个向量之和的模小于等于2–√∗r≤1.5e62∗r≤1.5e6\sqrt{2}*r≤1.5e6。证明如下: 已知|a|≤r,|b|≤r,假设夹角为Θ,|a−b|2=|a|2+|b|2−2∗|a|∗|b|∗cosΘ已知...原创 2018-06-26 17:56:26 · 664 阅读 · 0 评论 -
CodeForces ~ 996D ~ Suit and Tie (贪心 + 模拟)
题意n个互不相同的数字,每个数字有两个,共2*n个数字,使得任意相等的数字都相邻,最少的操作次数,操作为:交换相邻两个数字的位置。思路感觉从前往后贪心的使每一个不符合要求的数对变得合法就行,造了几个样例感觉没问题,就搞了一下,就AC了。。。 从前往后扫(i+=2),如果a[i]跟a[i+1]相同,就找到和他相同的那个数字,然后把它交换到a[i+1]的位置,统计答案就OK#...原创 2018-06-25 21:09:35 · 418 阅读 · 0 评论 -
Codeforces ~ 996A ~ Hit the Lottery (贪心)
题意用100,20,10,5,1的硬币凑n块钱,最小需要的硬币个数。思路因为相互之间都是倍数关系,所以从大到小的贪心选取即可。#include <bits/stdc++.h>using namespace std;const int MAXN = 105;int n, ans;int main(){ scanf("%d", &n); ...原创 2018-06-25 20:40:22 · 803 阅读 · 0 评论 -
CodeForces ~ 991D ~ Bishwock(贪心 + 模拟)
题意2*n的地图,‘X’为墙,‘0’为空地,问最多能放多少个‘L’? ‘L’可以旋转。思路如果当前列为两个0,优先往左边放,然后往右边放。注意往左放完之后就不能往右边放了。#include &lt;bits/stdc++.h&gt;using namespace std;string a[2];int main(){ cin &gt;&gt; a[0] &gt;...原创 2018-06-24 14:37:30 · 614 阅读 · 0 评论 -
CodeForces ~ 991B ~ Getting an A(贪心)
题意给你N个数字,你可以将其中一个数字变为5,问最少操作几次可以使得平均值≥4.5思路排个序,优先变值小的#include <bits/stdc++.h>using namespace std;const int MAXN = 105;int n, a[MAXN];double sum;int main(){ scanf("%d", &...原创 2018-06-24 14:21:44 · 356 阅读 · 0 评论 -
CodeForces ~ 981D ~ Bookshelves (贪心 + 区间DP)
题意:N个数字分成K份,最大价值为多少?总价值为将每段的和&(按位与)。思路:对于结果ans最多不超过2^60,贪心选择从高位选每一个二进制位。对于第i位时,判断是否能够在保证前面i-1个二进制位不改变的情况下使得当前位为1,如果可以就让当前位为1。检查的是个区间DP,dp[i][j]表示前 i 个元素分为 j 份时使得前(当前位-1)个二进制位不变的情况下是否能使当前位为1。#inclu...原创 2018-05-31 17:54:25 · 338 阅读 · 0 评论 -
CodeForces ~ 985C ~ Liebig's Barrels (贪心,边界处理)
题意:你要组成N个木桶,组成每个木桶需要K个木块,(第二行给你N*K个木块),使得任意两个木桶之间的差值不超过L的情况,使得所有木桶可以装的水的和最大,输出这个最大和,如果无法满足要求输出0。我们都知道“短板理论”,一个木桶能装多少水,取决于最短的那个木板。思路:首先考虑没答案的情况,假设最短的木板为a[0],那么所有木桶中能装水的最小值就确定了为a[0]。所以其他木桶的最短板不能超过a[0]+L...原创 2018-05-28 16:21:22 · 583 阅读 · 0 评论 -
PAT ~ L2-003. 月饼 (贪心)
思路:按照性价比排序,然后贪心选择贵的先卖。注意有的地方要用double就可以了。#include<bits/stdc++.h>using namespace std;const int MAXN = 1e3 + 5;int N;double D;pair<double, double> a[MAXN];bool cmp(const pair<double...原创 2018-03-13 17:54:01 · 321 阅读 · 0 评论 -
NSWOJ ~ 1105 ~ 喷水装置(一)(贪心)
1105 - 喷水装置(一)时间限制:3秒 内存限制:128兆题目描述现有一块草坪,长为20米,宽为2米,要在横中心线上放置半径为Ri的喷水装置,每个喷水装置的效果都会让以它为中心的半径为实数Ri(0输入第一行m表示有m组测试数据每一组测试数据的第一行有一个整数数n,n表示共有n个喷水装置,随后的一行,有n个实数ri,ri表示该喷水装置能覆盖的圆的半径。原创 2017-04-05 15:54:57 · 440 阅读 · 0 评论 -
Educational Codeforces Round 62 (Rated for Div. 2) (A,B,C,D,E)
A. Detective Book题意有一本侦探小说共n页,每一页都会有一个问题,第 i 页的答案在第 a[i] 页。有个人再看这本书,他读书有个习惯,必须把所有的问题都找到答案,问他几天能看完这本书?题解定义MAX为前缀的最大值,统计有几个位置MAX = a[i] 即可。#include<bits/stdc++.h>using namespace std;c...原创 2019-03-25 17:13:41 · 478 阅读 · 0 评论