ACM周总结5.29

这周主要练习了贪心和线性DP,看了那几篇博客,都是好题,贪心这部分题简单的是真简单,难的是真难,主要在于这个标准怎么去定,还有和搜索并查集等知识结合起来的,就复杂起来了,难度一下子就上来了。

这周花在ACM上的时间比前几周少了点,贪心专题练习也才总结了20多道,但好在看的题还行,基本思路是理清楚了,贪心这部分没什么知识点好整理的,主要讲思路和方法,浅总结几道题。

uva11039 设计建筑物 https://blog.csdn.net/fouzhe/article/details/50792843

这是看的第一篇博客,也是练习的第一道题,一般来说,做的第一道题一定是最认真的,也是处于刚开始的状态,印象会比较深,题意就是有n个绝对值各不相同的非0整数,选出尽可能多的数,排成一列,使得正负号交替,且绝对值递增。输入整数n和n个整数,输出最长序列长度。采用贪心算法做就是从小到大排列,先在两端中选取绝对值大的,然后根据正负交替选择比当前绝对值小的。这个思路还算清晰。

Canada Cup 2016 F. Family Photoshttps://blog.csdn.net/fouzhe/article/details/55806016

这篇就要比上一个难多了,首先题意很难理解,思路也不是那么好想,实现起来要麻烦很多,题意是说有n对照片,两个人A和B轮流取。每对照片有四个值a1,b1,a2,b2,表示第一张和第二张对A和B来说的喜悦值,只有第一张被取走时才能取第二张。轮到一个人时,她可以选择不取,如果连续两轮中A和B都选择不取那么游戏结束。她们都希望自己的喜悦值-对方的喜悦值的差值尽量大。假设两个人都采用最佳策略,求最后A的喜悦值和B的喜悦值的差值。 考虑一张照片(a,b),如果被A取走,对答案的贡献是a,如果被B取走,对答案的贡献是-b。那么我们把一张照片(a,b)换成((a+b)/2,(a+b)/2),并把答案加上(a-b)/2。这样如果A取了这张照片,那么实际贡献(a-b)/2+(a+b)/2=a;B取走实际贡献(a-b)/2-(a+b)/2=-b。这样一来每张照片对A和B来说是一样的,我们只要排个序然后贪心即可。并且由于a1+b1>=a2+b2,所以第一张一定在第二张之前被取走。偶数给A,奇数给B。并且排序的根据是(a+b)/2,因此也可以直接将a+b排序,处理的时候可以把答案加上a,然后排序后,如果当前照片是给B的,就从答案中减去这个值,即a-(a+b)=-b。

Codeforces Round #382 (Div. 2)C. Tennis Championshiphttps://blog.csdn.net/fouzhe/article/details/53386299

这道题要用到斐波那契数列,要是能想到的话,怎么去贪自然就简单明了,题意是说每个人输了比赛就会被淘汰,每两个人可以打比赛的要求是a赢过x场比赛b赢过y场比赛则当abs(x - y) <= 1 时他们可以进行比赛,总共n个选手,问最终的赢家可能赢过的场次的最大值。思路是用 F[i] 数组表示最大比赛场数为 i 场时所需要的最小人数,在冠亚军比赛之前,冠军赢了 i - 1 场,并且与冠军比赛的人和与亚军比赛的人是没有交集的,要的是最小人数,所以亚军是赢了i  - 2  场 比赛,所以有递推公式F[i] = F[i-1] + F[i-2],即斐波那契数列,输出第一个大于n的F[i] 的 i-1.

uva1632Alibabahttps://blog.csdn.net/fouzhe/article/details/51038064
 这道题现在看还是有一点懵,这是一道区间DP+贪心的题目,题意是在一条直线上有n个点有宝藏,其中第i个点的坐标是xi(每个点的坐标都是整数),且每个宝藏在di秒之后都会消失,Alibaba可以在任何一个点出发,移动一个单位需要一个单位的时间,求访问完所有点的最短时间。解题步骤是利用区间dp,根据贪心在区间[i,j]内取完宝藏后必在i点或则j点,用数组dp[i][j][0]表示拿完区间内的所有宝藏,且最后位于i,用dp[i][j][1]表示拿完区间间的所有宝藏且最后位于j。则状态转移方程为:
dp[i][j][0]=min(dp[i+1][j][0]+a[i+1]-a[i],dp[i+1][j][1]+a[j]-a[i]);
dp[i][j][1]=min(dp[i][j-1][0]+a[j]-a[i],dp[i][j-1][1]+a[j]-a[j-1]);
判断是否有解的方法:更新完dp[i][j][0]后比较其与di的大小,如果比di大则无解,赋值inf,同理处理dp[i][j][1]。以后还需要再好好看看这道题。

HDU 5176 The Experience of Love (带权并查集 + 贪心)https://blog.csdn.net/Tc_To_Top/article/details/43876481

这道题是并查集+贪心,求树上任意两点路径上边权的 ( 最大值 - 最小值 ) 之和。类似于kruskal求最小生成树,按边权从小到大排序 顺着扫一遍,每次扫到一条边,都要合并两棵树,分别属于这两棵树的任两个点之间最短边就是当前这条边,这样可以算出这条边作为最短边出现的次数,也就是对答案作出的负的贡献。 反之,逆着扫一遍,可以知道每条边作为最长边出现的次数,也就是对答案作出的正的贡献。 

HDU 5527 Too Rich (好题 贪心 DFS)https://blog.csdn.net/Tc_To_Top/article/details/49634405

这道题是DFS+贪心, 有1,5,10,20,50,100,200,500,1000,2000十种面值的钱币各ci个,现在要凑出p元,问最多可以用多少钱币凑出,设所有的硬币总共的价值为s,则s-p为不需要凑的钱数,只要求出凑够s-p元所需的最少硬币数量即可。
凑的过程可以用贪心策略,从面值大的硬币开始选,每次都尽可能地多选,直至将剩下的钱凑完为止。对于每种硬币,都在尽可能多选的条件下少选一个,给剩下的硬币留出更多的空间以保证得到最优解。

不难看出来,贪心只是这些题目的一小部分,很多题都是浅用一下,少了他却不行,所以贪心的应用真的是很广,也是主要思想部分,贪心没写对,那答案就绝对不是最优解,做题的时候本来就会想怎么做使他最有利,具体怎么去做,跟贪心的概念对应起来了:每次都要选择对自身最为有利的结果,保证自身利益的最大化。之前很多题都是用这种方法做,但现在告诉你了,这叫贪心,所以,算是给他归了一个类吧。

这周贪心应该是结束了,下周就是线性DP了,继续加油。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

我是蒸的c

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值