BZOJ 1028 BZOJ 1029 //贪心】的更多相关文章

1028: [JSOI2007]麻将 Time Limit: 1 Sec  Memory Limit: 162 MBSubmit: 2197  Solved: 989[Submit][Status][Discuss] Description 麻将是中国传统的娱乐工具之一.麻将牌的牌可以分为字牌(共有东.南.西.北.中.发.白七种)和序数 牌(分为条子.饼子.万子三种花色,每种花色各有一到九的九种牌),每种牌各四张.在麻将中,通常情况下一 组和了的牌(即完成的牌)由十四张牌组成.十四张牌中的两张组…
题目链接 枚举对子,枚举每张牌,先出完它的刻子,剩下的出顺子.\(O(n^3)\). 不是这样 -> 出完所有刻子,最后出顺子.(日常zz) 优先仨相同的,然后顺子,有一次且一定要用一次机会补顺子的空位,即把刻子换成对子.这样好像是\(O(n^2)\). 不写\(O(n^2)\)的了,特判之类大概非常麻烦.. //828kb 396ms #include <cstdio> #include <cctype> #include <cstring> #define g…
题目链接:BZOJ - 1028 题目分析 枚举听的是哪种牌,再枚举成对的是哪种牌,再贪心判断: 从1到n枚举每一种牌,如果这种牌的个数小于0,就返回不合法. 将这种牌的张数 % 3, 剩下的只能和 i + 1, i + 2 这两种牌构成顺,所以 Num[i + 1] -= Num[i]; Num[i + 2] -= Num[i]; 牌的种类要枚举到 n + 2,因为第 n - 1 和第 n 种牌可能会减掉 n + 1,n + 2 的牌. 代码 #include <iostream> #inc…
Description 麻 将是中国传统的娱乐工具之一.麻将牌的牌可以分为字牌(共有东.南.西.北.中.发.白七种)和序数牌(分为条子.饼子.万子三种花色,每种花色各有一到 九的九种牌),每种牌各四张.在麻将中,通常情况下一组和了的牌(即完成的牌)由十四张牌组成.十四张牌中的两张组成对子(即完全相同的两张牌),剩余的 十二张组成三张一组的四组,每一组须为顺子(即同花色且序数相连的序数牌,例如条子的三.四.五)或者是刻子(即完全相同的三张牌).一组听牌的牌是指一 组十三张牌,且再加上某一张牌就可以…
贪心的一种,维护一种尽可能优的状态(即不会比最优解差),将这种状态保持到最后. /************************************************************** Problem: 1029 User: idy002 Language: C++ Result: Accepted Time:400 ms Memory:2368 kb *************************************************************…
贪心 按T2(完成时限)排序,然后从前往后依次枚举 如果sum+a[i].t1<=a[i].t2则加入 如果来不及修这个建筑: 如果当前这个建筑的维修时间t1比之前修过的建筑中耗时最长的耗时短,则替换一下 否则跳过- - 以上过程用一个堆(priority_queue)维护即可 SB了一下:pq默认是大根堆……sigh /************************************************************** Problem: 1029 User: Tunix…
题目:http://www.lydsy.com/JudgeOnline/problem.php?id=2151 分析:原型是bzoj 1150(CTSC 2007) 首先DP无法下手,想到贪心.想到贪心的第一感觉就是从大的开始取,但明显有反例,最烦的就是一个大的旁边旁边两个也很大,导致如果取了那两个最后结果更大.解决的办法就是每次取最大的同时,把它同旁边两个点合并成一个点,权值取:左+右-中间,然后后面继续去最大的点这么做下去…… 大概的认识就是给了一个反悔的机会,如果取了一个合并点也就相当于不…
BZOJ 感觉自己完全没做过环上选线段的问题(除了一个2-SAT),所以来具体写一写qwq. 基本完全抄自remoon的题解qwq... (下标从\(0\sim m-1\)) 拆环为链,对于原线段\([l,r]\),若\(l\leq r\)就拆成两个线段\([l,r],[l+m-1,r+m-1]\),否则拆成一个线段\([l,r+m-1]\).(这样枚举的时候限制所选线段在一个\(m\)区间内就行了) 考虑暴力.直接枚举是否一定选某个线段\(i\),然后贪心选其它的即可(限制所选线段在\([l_…
题目传送门 传送点I 传送点II 题目大意 给定$n$个区间,问恰好删去其中$k$个,剩下的区间的并的最大总长度. 显然被包含的区间一定不优.再加上被包含的区间对计数不友好.直接把它删掉. 注意到题目说恰好,其实是骗人的.多删几个也不会影响(删太多了就有影响了). 按照右端点排序,然后用$f[i][j]$表示考虑前$i$个区间,已经选了删掉$j$个. 考虑转移,第一种情况是第$i$个区间不选,直接通过$i - 1$转移. 第二种情况是要选$i$.然后要计算贡献.这时考虑上一个选择的是什么? 如果…
昨天梦到这道题了,所以一定要A掉(其实梦到了3道,有两道记不清了) 暴力枚举等的是哪张牌,将是哪张牌,然后贪心的判断就行了. 对于一个状态判断是否为胡牌,1-n扫一遍,然后对于每个牌,先mod 3, 如果还有剩余,就需要和i+1,i+2凑成顺子,减掉i+1,i+2的值就行了,然后 只要枚举到的i为负就是不可行,还有要枚举到n+2位,因为第n,n-1为可能 减了n+1,n+2但是没扫到. /******************************************************…
1028: [JSOI2007]麻将 Time Limit: 1 Sec Memory Limit: 256 MB 题目连接 http://www.lydsy.com/JudgeOnline/problem.php?id=1028 Description 麻将是中国传统的娱乐工具之一.麻将牌的牌可以分为字牌(共有东.南.西.北.中.发.白七种)和序数牌(分为条子.饼子.万子三种花色,每种花色各有一到九的九种牌),每种牌各四张.在麻将中,通常情况下一组和了的牌(即完成的牌)由十四张牌组成.十四张牌…
Description 麻将是中国传统的娱乐工具之一.麻将牌的牌可以分为字牌(共有东.南.西.北.中.发.白七种)和序数牌(分为条子.饼子.万子三种花色,每种花色各有一到九的九种牌),每种牌各四张.在麻将中,通常情况下一组和了的牌(即完成的牌)由十四张牌组成.十四张牌中的两张组成对子(即完全相同的两张牌),剩余的十二张组成三张一组的四组,每一组须为顺子(即同花色且序数相连的序数牌,例如条子的三.四.五)或者是刻子(即完全相同的三张牌).一组听牌的牌是指一组十三张牌,且再加上某一张牌就可以组成和牌…
1028: [JSOI2007]麻将 Time Limit: 1 Sec  Memory Limit: 162 MBSubmit: 1270  Solved: 576[Submit][Status][Discuss] Description 麻将是中国传统的娱乐工具之一.麻将牌的牌可以分为字牌(共有东.南.西.北.中.发.白七种)和序数牌(分为条子.饼子.万子三种花色,每种花色各有一到九的九种牌),每种牌各四张.在麻将中,通常情况下一组和了的牌(即完成的牌)由十四张牌组成.十四张牌中的两张组成对…
题目链接 贪心,每次选价值最大的一条到根的链.比较显然(不选白不选). 考虑如何维护这个过程.一个点的价值选了就没有了,而它只会影响它子树里的点,可以用DFS序+线段树修改.而求最大值也可以用线段树. 每个点只会被取一次,即价值也只会被清空一次.所以每选一条链就暴力往上跳,直到到一个清空过的点,顺便在线段树上修改经过点的子树权值就可以了. 复杂度\(O((n+k)\log n)\). 实际上,每个点只被统计一次,就是选\(k\)条最长的不相交的链(链形态是从上到下的). 所以可以想到长链剖分.以…
题目链接 从高到低位贪心,判断答案的该位能否为0. 求一个前缀和sum.对于最高位,答案的这一位可以为0当且仅当至少存在m个位置满足sum[i]在这一位上为0. 注意sum[n]这一位必须为0. 如果确定高位为0,则高位为1的sum[i]就不能再选(即不能做右端点). 这样求一遍所有位即可.复杂度\(O(n\log a)\). //5508kb 768ms #include <cstdio> #include <cctype> #include <algorithm>…
题目链接: https://www.lydsy.com/JudgeOnline/problem.php?id=1028 题目大意: 麻将是中国传统的娱乐工具之一.麻将牌的牌可以分为字牌(共有东.南.西.北.中.发.白七种)和序数牌(分为条子.饼子.万子三种花色,每种花色各有一到九的九种牌),每种牌各四张.在麻将中,通常情况下一组和了的牌(即完成的牌)由十四张牌组成.十四张牌中的两张组成对子(即完全相同的两张牌),剩余的十二张组成三张一组的四组,每一组须为顺子(即同花色且序数相连的序数牌,例如条子…
一个无向连通图,顶点从1编号到N,边从1编号到M. 小Z在该图上进行随机游走,初始时小Z在1号顶点,每一步小Z以相等的概率随机选 择当前顶点的某条边,沿着这条边走到下一个顶点,获得等于这条边的编号的分数.当小Z 到达N号顶点时游走结束,总分为所有获得的分数之和. 现在,请你对这M条边进行编号,使得小Z获得的总分的期望值最小. 总分的期望值=每条边的期望经过次数*边的编号 之和. 不论我们如何编号,每条边的期望经过次数是不会变的,要使得边权和的期望最小,只需要贪心地使期望次数和边权倒序对应即可.…
题目链接:http://www.lydsy.com/JudgeOnline/problem.php?id=2460 网上很多题目都没说这个题目的证明,只说了贪心策略,我比较愚钝,在大神眼里的显然的策略还是想证明一下才安心……所以这里记录一下证明过程. 贪心策略:按魔力值从大到小排序,从大往小往线性基里插,如果成功插入新元素,就选这个,如果插不进去,就不选这个. 证明: 设有n个材料,每个材料的属性值是x[1],x[2],...,x[n],魔力值是v[1],v[2],...,v[n],这里假设v已…
题目链接:http://www.lydsy.com/JudgeOnline/problem.php?id=2460 解法:从大到小排序,依次贪心的添加到当前集合就可以了,需要动态维护线性基.用拟阵证明,线性基性质,线性基中任意子集异或和不为0,所以从大到小加入就好. #include <bits/stdc++.h> using namespace std; typedef long long LL; struct node{ LL a, b; node(){} bool operator<…
4029: [HEOI2015]定价 题目连接: http://www.lydsy.com/JudgeOnline/problem.php?id=4029 Description 在市场上有很多商品的定价类似于 999 元.4999 元.8999 元这样.它们和 1000 元.5000 元和 9000 元并没有什么本质区别,但是在心理学上会让人感觉便宜很多,因此也是商家常用的价格策略.不过在你看来,这种价格十分荒谬.于是你如此计算一个价格 p(p 为正整数)的荒谬程度: 1.首先将 p 看做一个…
[POI2006]Met Time Limit: 15 Sec  Memory Limit: 162 MBSubmit: 203  Solved: 108[Submit][Status][Discuss] Description 给出一棵N个结点的树,选择L条路径,覆盖这些路径上的结点,使得被覆盖到的结点数最多. Input 第一行两个正整数N.L(2 <= N <= 1,000,000, 0 <= L <= N).下面有N-1行,每行两个正整数A和B(1 <= A, B &…
和数据备份差不多 设二元组(i,a[i]),开一个大根堆把二元组塞进去,以len排序,每次取出一个二元组 因为单纯的贪心是不行的,所以设计一个"反悔"操作. 记录二元组的前驱pr后继ne,把拿出来的二元组的len加进答案,然后把当前二元组和它的前驱后继当成一个,也就是len[x]=a[pr[x]]+a[ne[x]]-a[x],相应修改前驱后继,然后"删掉"前驱后继的二元组,这样的意思是如果再次选了修改过的二元组x,就意味着退还掉x,选择它的前驱后继,易证这样个数和a…
[题目链接]:http://www.lydsy.com/JudgeOnline/problem.php?id=1028 [题意] [题解] /* 枚举新加入的一张牌是哪一张牌; 然后尝试把它加进去; 再枚举1..n里面是哪一张牌组成了对子; 然后再看看剩余的牌能不能按照要求 分成3*m组 个数直接对3取模 因为个数大于3的话,就直接组成3个一样的一组就好了; 剩下的看看能不能组成符合要求的顺子; 写个模拟找顺子的过程就好 */ [完整代码] #include <bits/stdc++.h> u…
发现每一次切割都会使另一方向所有切割次数++. 而每一刀的代价就是 cost*切割次数,故贪心按照cost从大到小排序即可. #include <bits/stdc++.h> #define N 200000 #define LL long long using namespace std; void setIO(string s) { string in=s+".in"; freopen(in.c_str(),"r",stdin); } struct…
看上去像是一个最大权闭合子图裸题但是数据太大 我们可以先把守卫的视野转换到第二象限(每个守卫可以看到横坐标比他小 纵坐标比他大的宝物) 然后按X从小到大 再按Y从大到小排 这样我们就可以按SORT序遍历守卫 然后贪心地把每个守卫的流量流给离他最近的Y最小的宝物 易证这样是最优的 #include<bits/stdc++.h> #define ll long long using namespace std; inline void read(int &x) { char c; ; ')…
题目链接 因为有删除,考虑倒序处理某个p的询问. 那么每天删除xi的蔬菜就变成了每天运来xi的蔬菜.那么我们取当前最优的即可,早取晚取都一样,不需要留给后面取,还能给后面更优的留出空间. 这样就只需考虑现在了.于是我们能得到p为某个值的答案.多次询问显然需要递推. 而p-1与p相比只是少卖了m的蔬菜.把收益最小的m个删掉即可. 注意堆的插入删除顺序. 复杂度\(O(mqlogn)\). 还有一种求询问p的方法,是直接按蔬菜价值排序,然后每次找到其出现位置往前覆盖.如果某天已卖m则用并查集合并掉.…
思路:dp[ i ] 表示 排序后前 i 个元素匹配的最小值, 我们可以发现每个点和它匹配的点的距离不会超过2,这样就能转移啦. #include<bits/stdc++.h> #define LL long long #define fi first #define se second #define mk make_pair #define pii pair<int,int> #define piii pair<int, pair<int,int> >…
1248: 游乐园Pleasure Ground Time Limit: 10 Sec  Memory Limit: 128 MBSec  Special JudgeSubmit: 6  Solved: 2[Submit][Status][Discuss] Description HarryPotter是一家游乐场的新负责人.刚上任时HarryPotter发现游客们频频抱怨 游乐场的道路非常拥挤.经过研究,HarryPotter打算把游乐场中所有道路改为单行道, 就是说游客只能从道路的一端走到另…
题目:https://www.lydsy.com/JudgeOnline/problem.php?id=2535 https://www.lydsy.com/JudgeOnline/problem.php?id=2109 考虑按拓扑序决策,发现不太行:主要是一种情况:虽然自己的 k[ ] 靠后,但自己限制的点的 k[ ] 靠前. 这样的话,自己应该尽量往前放:但为了别的点的这种情况,自己又应该尽量往后放,所以无法决策了. 发现这种情况主要和后面的点是否紧急有关.所以就是虽然拓扑序是那样的,但可以…
首先可以对n个目标串单独进行处理. 对于每个目标串,考虑把模式串按'*'进行划分为cnt段.首尾两段一定得于原串进行匹配.剩下的cnt-2段尽量与最靠左的起点进行匹配. 对于剩下的cnt-2段.每段又可以通过‘?’划分为k个子串.对每个子串求出hash值.然后通过枚举起点与目标串的某个区间的hash进行判断. 就可以在O(k)的时间进行每一次的枚举了.对于目标串区间的hash值.可以通过预处理hash前缀进行O(1)询问. 而最多进行len次枚举.所以总复杂度为O(n*len*k). 另外判断子…