贪心算法
贪心算法的题
深巷wls
平平无奇
展开
-
P2240 【深基12.例1】部分背包问题(C/C++)
P2240 【深基12.例1】部分背包问题先把物品按照单位重量的价值降序排序,然后依次装入背包。如果背包容量不小于当前要装的物品重量,就全部装入,如果小于,那就剩余多少容量就装多少容量的当前物品。#include<bits/stdc++.h>using namespace std;struct jinbi{ double m; double v;}a[110];bool cmp(jinbi x,jinbi y){ return x.v/x.m>y.v/y.m;原创 2022-04-13 17:19:39 · 1442 阅读 · 1 评论 -
H.答疑(C/C++)贪心
贪心策略:让总时间花费最小的先问#include <bits/stdc++.h>#define llu unsigned long longusing namespace std;struct node{ int a; int s; int e;};bool cmp(node x,node y){ return (x.a+x.s+x.e) < (y.a+y.s+y.e);}llu t=0,ans=0;int main(){ int n; cin &g..原创 2022-03-26 10:07:08 · 889 阅读 · 0 评论 -
霍夫曼编码树(C/C++)
用一个优先队列,依次把队列前两个合并,再把合并的结果放入优先队列即可。#include<iostream>#include<cstdio>#include<iomanip>#include<cstdlib>#include <algorithm>#include<string.h>#include<queue>#include<math.h>#define llu unsigned long .原创 2022-02-13 14:22:35 · 512 阅读 · 0 评论 -
货币系统(C/C++)
意思就是给定一个包含n个元素的集合A,求一个最小的子集B使得A能表示的数B也能表示,A不能表示的数B也不能表示。我们可以发现,因为B是A的子集,所以A不能表示的数B一定不能表示,因此我们只需要处理能表示的数就可以。再仔细想一下,其实这道题就是让我们求这个集合里哪些元素不可以被集合里的其他元素表示,比如样例的集合{3,19,10,6},如果一个元素可以被其他元素代替,那么这个元素可以表示的不属于这个集合的元素也可以被表示出来,比如12=6+6,而6=3+3,所以我们没必要保留6,想通以后就很容易发现这是.原创 2022-02-13 14:06:12 · 1325 阅读 · 0 评论 -
荒谬的定价(C/C++)
想一下会发现,末尾数字0肯定是越多越好,但是数据范围比较大,挨个遍历肯定不行,所以就要记录一下当前计算的这个数字i末尾有几个0,例如当前价格末尾有3个0,遍历的时候下一个价格直接选取i+1000进行计算;然后计算荒谬度的时候,最后一位数字为5时处理一下即可。AC代码:#include<iostream>#include<cstdio>#include<iomanip>#include<cstdlib>#include <algorithm.原创 2022-02-12 11:59:21 · 194 阅读 · 0 评论 -
最多选几条线段(C/C++)
和这道活动安排题是类似的贪心策略的选择就是每次都选结束时间最早的,为什么可以看上面那篇博客。起始直接给k赋值为1,然后碰到符合条件的再k++;#include<iostream>#include<cstdio>#include<iomanip>#include<cstdlib>#include <algorithm>#include<string.h>#include<math.h>#define ll.原创 2022-02-12 10:39:58 · 365 阅读 · 0 评论 -
拼成最小的数 V2(C/C++)
本来想直接用字典序给数列排序,然后按顺序输出,但是会有特殊情况不符合。正确的贪心策略是将两个字符串加起来排序,然后按顺序输出。AC代码:#include<iostream>#include<cstdio>#include<iomanip>#include<cstdlib>#include <algorithm>#include<string.h>#include<math.h>#define llu u.原创 2022-02-11 16:34:28 · 262 阅读 · 1 评论 -
接水问题二(C/C++)
和这道题类似,有一点点的不同,但是思路一样,这里不再写了。有一点小坑,就是输入的重要性和时间可以为0,这种数据会对sort函数产生影响,所以在输入时,需要处理一下这种数据。AC代码:#include<iostream>#include<algorithm>using namespace std;struct cow{ long long time; long long eat;};bool cmp(cow a, cow b){ return a.eat*.原创 2022-02-11 14:54:59 · 404 阅读 · 0 评论 -
P2878 [USACO07JAN]Protecting the Flowers S(奶牛吃花花)C++
输入输出样例:输入:63 12 52 33 24 11 6输出:86思路:就是贪心,我们把这两头牛的时间分别设为x1,x2把他们的每分钟的食草速度设成y1,y2那么如果先运奶牛1: 造成的损耗是:x.d * y.t如果先运奶牛2: 造成的损耗是:y.d * x.t优先运送损耗大的奶牛即可。AC代码:#include<iostream>#include<algorithm>using namespace std;struct cow{..原创 2021-11-22 23:16:08 · 623 阅读 · 0 评论 -
股票买卖(C/C++)
对于第一组样例,阿福可以第 1 次在第 1 天买入(价格为 5 ),然后在第 2 天卖出(价格为 14 )。第 2 次在第 3 天买入(价格为 -2 ),然后在第 7 天卖出(价格为 17 )。一共获得的利润是 (14 - 5) + (17 - (-2)) = 28对于第二组样例,阿福可以第 1 次在第 1 天买入(价格为 6 ),然后在第 2 天卖出(价格为 8 )。第 2 次仍然在第 2 天买入,然后在第 2 天卖出。一共获得的利润是 8 - 6 = 2对于第三组样例,由于价格一直在下跌,阿福可以.原创 2022-02-11 14:24:17 · 1880 阅读 · 0 评论 -
分配教室(C/C++)
题解:首先将开始时间和结束时间分别放进start和end数组里,然后从start数组里的第一个元素开始和end的第一个元素进行比较,若s1大,则教室数++,然后比较s2和e1,若e1大,则比较s1和e2,以此重复循环,直至s或t数组遍历完。这样写的目的是:当开始时间小于结束时间,说明得需要加一个房间供此活动,如果大于,说明可以在同一个房间。AC代码:#include<iostream>#include<cstdio>#include<iomanip>#i.原创 2022-02-10 13:55:32 · 747 阅读 · 0 评论 -
排队接水(C/C++)
简单贪心,按照需要接水时间从小到大来排序,依次接水即可AC代码:#include<iostream>#include<cstdio>#include<iomanip>#include<cstdlib>#include <algorithm>#include<string.h>#include<math.h>#define llu unsigned long longusing namespace std.原创 2022-02-10 13:30:25 · 1849 阅读 · 1 评论 -
删数问题(C/C++)
AC代码:#include<iostream>#include<cstdio>#include<iomanip>#include<cstdlib>#include <algorithm>#include<string.h>#include<math.h>#define llu unsigned long longusing namespace std;int main(){ string s;.原创 2022-02-10 12:12:50 · 775 阅读 · 0 评论 -
P1324 矩形分割(贪心算法)(C/C++)
P1324 矩形分割思路:贪心,优先劈开代价高的,否则就要多付出几次这个大代价。AC代码:#include<iostream>#include<cstdio>#include<algorithm>using namespace std;bool cmp(int x,int y){ return x>y;}int a[2010],b[2010];int main(){ int n,m; cin >> n >&g原创 2021-11-29 18:14:13 · 1164 阅读 · 0 评论 -
P2242 公路维修问题(贪心算法)C++
P2242 公路维修问题输入:18 43 4 6 8 14 15 16 17 21 25 26 27 30 31 40 41 42 43输出:25可以假设每一个坑都被管制了,但是由于管制的路段数量有限,所以就要减去尽可能大的没有坑路段,然后剩下的就是答案了。也就是一个线段分m段,那么有几个缺口呢,m-1个缺口,找出这最大的m-1个缺口,就分成了m段#include<cstdio>#include<algorithm> int n,m;int a[1500原创 2021-07-26 20:44:58 · 970 阅读 · 1 评论 -
P1610 鸿山洞的灯(贪心算法)C++
P1610 鸿山洞的灯第一盏和最后一盏等必须亮着,所以不找。我们使用递推优化。其本质是关灯时把前一盏灯移到当前这一盏灯的位置上,防止下次计算时寻找前一盏灯。有类似链表删除的作用。#include<bits/stdc++.h>using namespace std;int n,dist,a[100002],sum;int main(){ cin>>n>>dist; for(int i=1; i<=n; i++) cin>>a[i];原创 2021-07-26 20:20:44 · 347 阅读 · 0 评论 -
哈夫曼压缩(贪心算法)C/C++
时间限制: 1 Sec 内存限制: 128 MB题目描述相信大家都对哈夫曼编码有所了解,通常利用哈夫曼编码来压缩数据。现在给你一个字符串,你需要统计其中字符出现的次数然后以出现次数为权值构建一棵哈夫曼树,例如字符串为ABBCCC,其中一种可能的编码是A = 00,B = 01,C = 1,那么这个字符串所对应的哈夫曼编码就是000101111,你的任务是求出字符串最终形成的哈夫曼编码的长度。输入一行由大写字母组成的字符串,且字符串长度不超过10000,该字符串最少包含一种字符。输出字符串的哈夫原创 2021-05-27 08:54:21 · 651 阅读 · 0 评论 -
最大乘积问题(贪心算法)C/C++
时间限制: 2 Sec 内存限制: 128 MB题目描述当Bob睡觉的时候,他想到了一个不可思议的问题,这将是一个非常适合于这次比赛的问题!他决定先用这个问题去试一下他叔叔。经过长时间的思考,Bob的叔叔对如何解决这个问题没有任何想法。但是,他不想告诉Bob他解决不了这个问题,所以他找不到比问你如何解决这个问题更好的方法了。问题如下:给你一个整形数组a=[a1,a2,a3,….,an];对于任意的i,你可以使用魔法把ai变为(-ai-1),求使a1a2a3*…*an最大,输出方案即可。(本题保证方原创 2021-05-27 08:44:50 · 1713 阅读 · 0 评论 -
多机调度问题(贪心算法)C++
问题 F: 多机调度时间限制: 1 Sec 内存限制: 128 MB题目描述有n台规格一样的机器同时工作,有m个零件需要加工,第i个零件加工时间为ti,请你计算出加工完这批零件最少需要多少时间。输入第一行为两个整数n,m。n表示机器数,m表示零件数(1<=n<=1e3,1<=m<=1e5)。接下来一行m个整数为每个零件需要的加工时间(1<=ti<=1e3)。输出加工所有零件需要的最少时间。样例输入3 52 3 4 5 6样例输出7策略:当n原创 2021-05-21 21:31:20 · 2132 阅读 · 1 评论 -
合并石子(果子)(贪心算法)C++
石子合并时间限制: 1 Sec 内存限制: 128 MB题目描述现在有n堆石子,你每次可以挑任意两堆将其合并成一堆,消耗体力是两堆石子的数量和。可知经过n-1次合并后只剩下一堆石子,现在要求消耗总体力最小,请求出合并石子所消耗的最小总体力。输入第一行一个n(0 < n <= 10000),代表有n堆石子,接下来一行n个由空格分隔的数ai(0 <= ai <= 100000)表示第i堆石子的数目。输出输出一行表示答案。样例输入51 2 3 4 5样例输出33原创 2021-05-19 20:43:20 · 1656 阅读 · 0 评论 -
最优装载(贪心算法)C++
题目描述有一个载重量为n的轮船,有m个集装箱的货物需要运送,每个集装箱有一个重量,请计算在忽略体积的情况下轮船一次最多可以运输多少个集装箱?输入第一行为两个整数n,m。分别为轮船载重量和集装箱个数(1<=n<=1e7,1<=m<=1e4)。接下来m行每行有1个整数w(1<=w<=1e3),表示该集装箱的重量。输出输出轮船一次最多可以运送的集装箱数量。样例输入10 43456样例输出2策略:因为忽略体积,所以在没有达到最大装载重量的时候,每一步原创 2021-05-19 19:45:53 · 2005 阅读 · 0 评论 -
田忌赛马(贪心算法)C++
问题描述:你一定听说过田忌赛马的故事吧?如果3匹马变成n匹(n<=100),齐王仍然让他的马按照优到劣的顺序初赛,田忌可以按任意顺序选择他的赛马出赛。赢一局,田忌可以得到200两银子;输一局,田忌就要输掉200两银子。已知道国王和田忌的所有马的奔跑速度,请设计一个算法,帮助田忌赢得最多的银子。输入:第一行一个整数n,表示双方各有n匹马;第二行n个整数分别表示田忌的n匹马的速度;第三行n个整数分别表示齐王的n匹马的速度。输出:输出对田忌来说最好的结果贪心策略:1,如果田忌的最快马快于齐原创 2021-05-18 22:25:25 · 6660 阅读 · 0 评论 -
活动安排(贪心算法)C/C++
题目描述有n份兼职,每份兼职有一个开始时间和一个结束时间,假设你的空闲时间为从1到m,假如你的休息时间可以忽略,请你选择若干份兼职(每次只能做其中一个兼职),使你在该段空闲时间内完成的兼职份数最大。输入第一行为两个整数n,m分别表示n份兼职,空闲时间为1到m(1<=n<=1e4,1<=m<=1e5)。接下来n行每行有2个整数a,b。表示该兼职开始和结束时间(1<=a<=b<=m)。输出输出你在1到m时间段内最多能完成几份兼职。样例输入4 101原创 2021-05-17 22:37:38 · 5046 阅读 · 8 评论