贪心
哈希表扁豆
此人不懒,但什么都没写
展开
-
CodeForces - 120I Luck is in Numbers
Problem给定一个位数为2n的数字,定义该数字的幸运度为将后n位放至前n位在七段码下重叠的段的个数。要求找一个最小的比给定数字大且幸运度更大的数字且位数位2n。Solution贪心。只改变前i位的情况下能找到答案就不要修改i+1~2n位。设需要修改的最高位为pos,分两种情况处理:pos>n和pos<=n。在寻找最大位的过程中,每移动一位要保证前面位产生的贡献达到最大,此时不需要考虑前i-1位数的大小,因为前i-1位解决不了,第i位需从更大的数开始枚举。具体步骤:找最大位,原创 2021-09-08 18:41:09 · 154 阅读 · 0 评论 -
Appeal to the Audience
Problem将给定的权值放在树的叶子结点上,每个非叶子结点的值为权值最大的儿子,不计根,求最大总权值。Solution贪心即可,每次从优先队列弹出来的点看看其深度是不是真实深度,不是的话再加进去,这个样每个点记过贡献的点其实只会被遍历一次,时间复杂度O(n)。Code#include<iostream>#include<cstdio>#include<algorithm>#include<queue>using namespace std;原创 2021-08-11 15:43:10 · 155 阅读 · 0 评论 -
CF1379C Choosing flowers
Problemm种朵花,第i种买第x朵收益为ai+(x-1)*bi,问买n朵的最大收益。Solution收益最大的方案一定是买a最大的一部分,剩下的全买一种(不一定是b最大的那个,放在平面直角坐标系中易证)。枚举剩下全买的那个bi,替换掉所有的aj<=bi(对a排序,倍增查找),然后求这种情况下的最大收益。总时间复杂度mlogm,细节挺容易写错。Code#include <iostream>#include <cstdio>#include <queue&g原创 2021-08-02 14:59:27 · 118 阅读 · 0 评论 -
UVA10570 外星人聚会 Meeting with Aliens
本来不难的一道题,硬是因为写法的不好折腾了好几天,也因此学了一点东西。环的问题一定要将环平铺开,这样不容易出错!本质上的做法是枚举起点1的位置(这样考虑实现起来更不容易出错),然后枚举是正反(123…,321…),计算每一种情况的交换次数。计算每一种情况下的转置环的个数cnt(如53214要变成12345,转置环为{5,4,1},{3,2},个数为2),交换次数为n-cnt,优点在于不需要改变原序列进行一对一对的实际交换,可证明这个计算方法与贪心的交换所得答案一样。#include<ios.原创 2021-04-27 21:20:54 · 122 阅读 · 0 评论 -
UVA1614 奇怪的股市 Hell on the Markets
题意:给序列中的数添加正负号,使其和为0。贪心:给序列中的数从大到小排序,然后正着扫一遍,维护一个当前和sum,若sum<=0,则加上当前数,反之减去当前数。证明:假设最终有解,假设这个操作不成立,假设正确的操作是某一次连续加ai,aj,ai>=aj,之后做减法将ai和aj抵消,即将(ai-aj,2*aj)抵消,ai-aj可被抵消,因此上述贪心可行。#include<iostream>#include<cstdio>#include<algorithm.原创 2021-04-14 18:25:26 · 146 阅读 · 0 评论 -
UVA120 煎饼 Stacks of Flapjacks
不需要考虑效率的烙饼排序,不难发现我们可以将任意位置的煎饼在不影响下面的情况下翻到最上面,同时可以将最上面的煎饼翻到任意位置;因此可以参考选择排序,每次找一个最大的先翻到最上面,然后再将其翻到正确的位置。#include<iostream>#include<algorithm>using namespace std;int a[35],x,cnt,b[35],ans[35],num,tmp,d[35];char c;void solve(){ for(int i=.原创 2021-03-29 12:04:50 · 116 阅读 · 0 评论 -
CF865D Buy Low Sell High
题目翻译:已知接下来N天的股票价格,每天你可以买进一股股票,卖出一股股票,或者什么也不做.N天之后你拥有的股票应为0,当然,希望这N天内能够赚足够多的钱。一开始想用动态规划+单调队列优化,但是最坏情况下单调队列没有优化效果,时间复杂度还是n方的。买入等于卖出,可以考虑把操作转换成每到一天,从前面找一个价格最小且没有被买入的股票买入,并且允许反悔(撤回某一天的卖出,在转换后的操作的前提下不需要撤回买入)。用优先队列实现找前面价格最小的股票,假设当天股票价格为y,优先队列中最小股票价为x,..原创 2021-03-24 23:12:38 · 258 阅读 · 0 评论