[题解+总结]20151012贪心

1、前言

  NOIP前互测题第一弹——来自hcy的贪心专题。因为我考试前一天晚上手贱(真的算手贱吗)去BZOJ上刷题然后碰巧那道题就是今天的考试题,结果碰巧又被hcy注意到了。。。其实本来我无意去知道的。。结果就这样莫名其妙地A了。贪心什么的感觉还好,另外一道题以前做过,对于“三分”这个概念我印象还很深。

2、Lawnmower 割草机

大概题意:在n*m的0-1矩形中,从左上角(0,0)出发,每次只能朝两个方向移动——下,左或右。若当前行i为2的余数则向右,否则向右。求用最短路经过所有1的点。

总结:只有60分,怪我没有把题目看清啊。因为只需要经过所有1的点,所以如果最后几行没有1的话,就不需要走到后面几行去了,这个地方需要特判一下。

题解:贪心。首先假设每一行都一定有1,那么我们先求出每一行的最左端的1的位置和最右端的1的位置。因为要求必须走类似于“S”型的路,那么对于偶数行,横向距离为从当前位置走到当前行和下一行最右端的较大值,然后向下移动一格;奇数行反之,从当前位置走到当前行和下一行最左端的较小值,然后向下移动一格。

3、Price 定价(BZOJ 4029)

链接:

4、Food 外卖(BZOJ 3874)

链接:

5、XOR XOR游戏

大概题意:给出n个数,每次可以选出两个数相异或,并赋值给其中一个,可以异或无数次,求n个数最大和。

题解:

  我们可以用这n个数互相XOR直到每个数不能在变小(即变为极小值)(解决方法:贪心思想,先把每个数的最高位的位数变成不同的,然后通过最高位比较低的向量,把最高位高的数弄成极小。),然后我们可以用其他数将第一个XOR成极大值。(可以发现:1:极小值中,二进制数最高位为第i位的有且只有一个,与线性基相似。(否则可以用两个数XOR,变为两个更小的值)2:所得极大值一定是整个序列的最大值,可以发现,所有值化为极小值后,若二进制数最高位为第i位的数存在,那么二进制最高位大于i的数在第i位一定为0,也就是说所有非0值异或即可得XOR极大值)。
可以发现:最后用极大值 XOR 其他极小值所获得的序列是一个可行的序列。
证明所得每个解为最大:
  取第i个极小值与第一个XOR,设得到s,假设还可以获得一个更大的值,那么肯定会在XOR另一个极小值b。设b的二进制最高位为j,那么s在第j位的值一定为0。(否则不会更优)易知:第一个极大值在第j位一定是1.而s第j位为0,那么可知第i个极小值的第j位为1(1^1 = 0)。发现这是不合法的。(这样第i个极小值^b可以变的更小,与其为极小值不符)。复杂度:O(n^2)。

时间: 2024-10-13 00:47:02

[题解+总结]20151012贪心的相关文章

【题解】PIZZA 贪心

题目描述 Michael请N个朋友吃馅饼,但是每个朋友吃且仅吃一个馅饼的1/4.1/2或3/4.请你编程求出Michael至少需要买多少个馅饼. 输入输出格式 输入格式: 输入文件的第一行是整数N:接下来的N行中,每行都是1/4.1/2或3/4. 输出格式: 输出文件仅有一行包含一个整数——至少需要购买的馅饼数目. 输入输出样例 输入样例#1: 复制 6 3/4 1/2 3/4 1/2 1/4 1/2 输出样例#1: 复制 4 说明 1 ≤ N ≤ 10,000 思路 简单贪心但要注意细节讨论

LeetCode: Longest Substring Without Repeating Characters 题解

Given a string, find the length of the longest substring without repeating characters. For example, the longest substring without repeating letters for "abcabcbb" is "abc", which the length is 3. For "bbbbb" the longest subst

HDOJ 5360 Hiking 优先队列+贪心

原题链接:http://acm.hdu.edu.cn/showproblem.php?pid=5360 题意: 大概的意思就是每个人有个人数接受范围$[l_i,r_i]$,现在你每次能从还未被选取的人中选择一个人,如果当前人数符合这个人的需求,那么这个人就会被选中.现在让你输出一个选择的序列,使得被选择的人数尽量多. 题解: 就贪心就好,总的来说就是人数不断增大的时候,每次从可行的所有$l$中选择$r$最小的那个.至于为什么这样是最优的..需要脑补. 代码: #include<iostream>

BZOJ1826 [JSOI2010]缓存交换 堆 贪心

欢迎访问~原文出处--博客园-zhouzhendong 去博客园看该题解 题目传送门 - BZOJ1826 题意概括 Cache中有m个储存单元,接下来有n个访问地址,每个地址用一个数字表示.访问每一个地址,就要使用一次Cache的一个储存单元,当你选择某一个储存单元时,如果这个储存单元原来不是该地址,那么就发生一次遗失,并把该储存单元的值改为该地址:如果原来这个储存单元就是这个地址,那么不发生遗失且可以直接访问该地址.现在有n个地址访问请求依次输入,每次,你可以选择把地址放在哪一个存储单元,求

hdu_5969_最大的位或(贪心)

题目链接:hdu_5969_最大的位或 题意: 中文,还是自己看 题解: xjb贪心一下就行了 1 #include<bits/stdc++.h> 2 #define F(i,a,b) for(int i=a;i<=b;i++) 3 using namespace std; 4 typedef unsigned long long ll; 5 6 int t; 7 ll a,b; 8 int dita[70],ditb[70],eda,edb; 9 int main() 10 { 11

LA 3266 (贪心) Tian Ji -- The Horse Racing

题意: 田忌和齐王各有n匹马,如果马的速度比齐王的快就赢200,慢则输200,相等不赔不赚. 已知两人每匹马的速度(为整数)和齐王所排出的马的顺序,问田忌该如何应对才能使收益最大. 分析: 本以为是一道很简单的贪心,上来就贪,结果什么都没贪出来. 看了题解才发现贪心是比较复杂的. 这里贴上poj某牛的神分析. 贪心策略: 1,如果田忌的最快马快于齐王的最快马,则两者比. (因为若是田忌的别的马很可能就赢不了了,所以两者比) 2,如果田忌的最快马慢于齐王的最快马,则用田忌的最慢马和齐王的最快马比.

【CodeM初赛B轮】A 贪心

[CodeM初赛B轮]A 题目大意:给你一棵树,起初所有点都是白色的,你每次都能选择一个白点i,将这个点i到根路径上的所有到i的距离<k[i]的点都染成黑色(根和i也算,已经被染成黑色的点还是黑色).问最少需要染多少次才能将所有点都变黑. n<=100000 题解:显然贪心啊,但是我一开始居然写了树剖... 因为叶子节点是一定要染的,所以我们可以将所有点按DFS序排序,从后往前染.记录vis[i],表示之前已经将所有到i的距离<=vis[i]的点染成了黑色:再维护mx[i],表示之前染过

Tsinsen A1504. Book(王迪) 数论,贪心

题目:http://www.tsinsen.com/A1504 A1504. Book(王迪) 时间限制:1.0s   内存限制:256.0MB   Special Judge 总提交次数:359   AC次数:97   平均分:43.76 将本题分享到: 查看未格式化的试题   提交   试题讨论 试题来源 2013中国国家集训队第二次作业 问题描述 Wayne喜欢看书,更喜欢买书. 某天Wayne在当当网上买书,买了很多很多书.Wayne有一个奇怪的癖好,就是第一本书的价格必须恰为X,而之后

uoj #139. 【UER #4】被删除的黑白树 dfs序 贪心

#139. [UER #4]被删除的黑白树 Time Limit: 1 Sec Memory Limit: 256 MB 题目连接 http://uoj.ac/problem/139 Description 很久很久以前,有一棵树加入了 UOJ 群. 这天,在它讨论“一棵树应该怎么旋转”的时候一不小心被删除了,变成了被删除的树. 突然间,它突然发现它失去了颜色,变成了一棵纯白的树.这让它感觉很焦躁,于是它来拜托你给自己染上一些颜色. 我们可以把它描述为一棵 n 个节点的有根树(默认树的根为 1