
贪心
zhouyuyang233
此乃ZJ之蒟蒻也
望大牛勿喷
我等蒟蒻感激不尽
展开
-
bzoj1029: [JSOI2007]建筑抢修
传送门贪心显然。1.按照最后时限排序,暴力插入。但是显然会错。510 1010 202 212 212 21答案是2,但是显然最优的是4于是考虑改进。2.在无法修理时我们可以放弃花费时间最长的工作。明显花费时间最长的工作时间大于当前工作是修改更优。我们可以用一个大根堆实现。然后就通过了。我才不会告诉你我wa了5次。var原创 2017-03-02 11:30:33 · 326 阅读 · 0 评论 -
bzoj1136: [POI2009]Arc
传送门 首先我们可以证明1一个区间是合法的当且仅当平均数大于k 于是我们先将所有数减去k,再做前缀和 发现问题转化成了在他前面比他小的最大数。 这个随便单调队列水水九可以了。 话说前面那一大坨东西是什么鬼?#include <stdlib.h> #include <stdio.h> #include <time.h> #define MAGIC_BEGIN -435634223原创 2017-07-02 21:30:17 · 363 阅读 · 0 评论 -
bzoj1826: [JSOI2010]缓存交换
传送门 界定内存放进去还是出来的是他下一次出现的位置(没有是n+1) 显然先出现的比后出现的更优。 然后优先队列水一波。#include<cstdlib> #include<iostream> #include<cstdio> #include<cmath> #include<algorithm> #include<cstring>#include<map>#inclu原创 2017-06-22 21:14:59 · 352 阅读 · 0 评论 -
bzoj1912: [Apio2010]patrol 巡逻
传送门 k=0显然每条边都要走两次,答案=(n-1)*2 k=1我们找到树上最长链,在两段连边 在环上的就不用再走一遍了 答案=(n-1)-链长+1 k=2在k=1的基础上将那些边编圈变为-1,再跑最长链 不再环上显然只要一遍 但是在两个环上要走两遍。 答案=(n-1)-链长1+1-链长2+1#include<iostream>#incl原创 2017-07-11 21:54:14 · 269 阅读 · 0 评论 -
bzoj1105: [POI2007]石头花园SKA
传送门 篱笆的长度最小是第一目标,应当优先考虑。 易知,当所有石头的坐标都满足x<=y的时候、 一定能够得到最小的周长。 而满足这一周长的方式不止一种,可以将这个矩形关于y=x直线做对称,总共有四种可能的情况,全部枚举一遍即可。#include<cmath>#include<cstdio>#include<cstdlib>#include<cstring>#include<iostr原创 2017-05-19 18:30:59 · 518 阅读 · 0 评论 -
bzoj1560: [JSOI2009]火星藏宝图
传送门 O(N^2)dp是显然的。 考虑优化这个dp 首先(A+B)^2>=A^2+B^2 所以从A->B->C显然比A->C优秀。 根据这个特性,我们可以将点按照纵坐标为第一键值,横坐标为第二键值排序 对于每一列我们维护一个当前纵坐标最大的点 用这个点更新一定比它下面的点更新更优 因此对于每个点枚举横坐标比它小的列更新即可 时间复杂度O(nm) 大概2E左右#include<cstr原创 2017-05-03 21:03:53 · 413 阅读 · 0 评论 -
bzoj1237: [SCOI2008]配对
传送门 贪心排序。 然后可以yy出来在3个以内调整是最优的(我不会证系列) 然后就欢乐的结束了。#include<cmath>#include<cstdio>#include<cstring>#include<iostream>#include<algorithm>#define inf 1e12#define ll long longusing namespace std;l原创 2017-04-13 10:49:20 · 352 阅读 · 0 评论 -
bzoj1196: [HNOI2006]公路修建问题
传送门 二分答案。 显然我们应该尽可能的选择能选的一级公路。 如果不能选再选二级公路。 判断方案是否可行即可。var a,b,c,d,f:array [0..30005] of longint; n,m,k,i,l,r,mi:longint;function get(x:longint):longint; begin if f[x]=x then exit(x);原创 2017-04-04 11:45:28 · 705 阅读 · 0 评论 -
bzoj1177: [Apio2009]Oil
传送门 水题。 首先暴力求出所有k*k矩形的和,时间N^2 然后对每个点用前缀和维护出左上,左下,右上,右下的最大矩阵,再对每一行(列)维护以这一行(列)为底边的最大矩阵,然后枚举分割线暴力求解, 分割线只可能有6种情况, 暴力水过。uses math;var a,b,c,d,f:array [0..2505,0..2505] of longint; n,m,k,i,j,an原创 2017-04-02 15:39:11 · 379 阅读 · 0 评论 -
bzoj1217: [HNOI2003]消防局的设立
传送门 显然在两个消防站之间距离为5时最优。 就dfs一遍, 再对根处理一下就可以了.。#include<cstring>#include<cmath> #include<cstdio> #include<iostream> #include<cstdlib> #include<algorithm>#define N 1005using namespace std;s原创 2017-04-10 08:34:52 · 357 阅读 · 0 评论 -
51nod 1526 分配笔名
传送门 trie树。 首先建立trie树,如果是名字,打标记+1,如果是笔名,打标记-1 然后做贪心爆搜,如果当前节点标记之和与儿子节点标记之和不同,则贪心选择min乘上depth,答案一定是最优的。 数据有一组要深搜80万层,要加特判。#include<iostream>#include<cstdio>#include<algorithm>#include<cstring>#inc原创 2017-03-14 13:14:55 · 671 阅读 · 6 评论 -
bzoj1060: [ZJOI2007]时态同步
传送门 hzw说是树形dp 扯淡 直接贪心。 用f[x]表示以x为根的子树内,离x最远的点的距离。 显然有f[x]=max(f[son]+dist[x][son]) 按照贪心思想,在x与儿子之间放延迟器最好。 所以答案=sigma(f[x]-f[son]-dis[x][son])#include<cmath>#include<cstdio>#include<cstring>#in原创 2017-03-13 15:34:18 · 349 阅读 · 1 评论 -
bzoj1057: [ZJOI2007]棋盘制作
传送门 我们可以先用O(nm)时间求出向左向右扩展的最大距离 然后O(nm)枚举下端点位置(在矩形下面的边上) 计算出当高最高时的宽度,相乘后取max 正方形同理,只要取高度和宽度的min就行了。uses math;var hei,a,x,y,le,ri:array [0..2005,0..2005] of longint; n,m,i,j,maxju,maxzh:longint;原创 2017-03-11 20:28:38 · 275 阅读 · 0 评论 -
bzoj1078: [SCOI2008]斜堆
标题炒鸡吓人。 实质就是水题。 根据插入过程可以得到以下规律。 当前插入节点是极左的没有右儿子的节点。 大白话:向左儿子走只到没有右儿子为止。 记录答案,之后删除节点,交换所有父节点的左右儿子。 可以发现,这样是满足构造的。 但这为什么是最优解我不会证明QAQ 假装他是对的。#include<iostream>#include<cstdio>#include<algorithm>原创 2017-03-20 10:41:34 · 398 阅读 · 0 评论 -
bzoj1045: [HAOI2008] 糖果传递
传送门 首先,最终每个小朋友的糖果数量可以计算出来,等于糖果总数除以n,用ave表示。 假设标号为i的小朋友开始有Ai颗糖果,Xi表示第i个小朋友给了第i-1个小朋友Xi颗糖果,如果Xi<0,说明第i-1个小朋友给了第i个小朋友Xi颗糖果,X1表示第一个小朋友给第n个小朋友的糖果数量。 所以最后的答案就是ans=|X1| + |X2| + |X3| + ……+ |Xn|。 对于第一个小朋友,他原创 2017-03-06 15:53:28 · 359 阅读 · 0 评论 -
bzoj1047: [HAOI2007]理想的正方形
传送门 我们可以用二维ST表记录下2^i*2^i的矩阵最值,暴力枚举即可pass。 注意,本题略卡内存uses math;var ma,mi:array [0..1005,0..1005,0..10] of longint; n,m,a,i,j,k,tt,d,ans,maxx,minn:longint;begin read(n,m,a); for i:=1 to n do原创 2017-03-06 15:59:22 · 564 阅读 · 0 评论 -
bzoj3085: 反质数加强版SAPGAP
传送门 没看过1053的走这儿 剪枝大法好。 1.前一个质数个数必定大于后一个质数个数。 2.前一个质数的幂必定小于后一个质数的幂。 在加上一些奇奇怪怪的乱搞就可以了。 他比我讲得好#include<cstdio>#include<cstdlib>#include<iostream>#include<cmath>#include<cstring>#include<algorit原创 2017-03-09 15:50:28 · 727 阅读 · 0 评论 -
bzoj1034: [ZJOI2008]泡泡堂BNB
传送门一群不务正业的省队选手打泡泡堂。一眼田忌赛马既视感(实际上就是)我们可以用A队最弱的打B队最弱的,打不过就打最强的,这样可以拿最高分。A最低时B最高,于是我们把B队也模拟一下设答案为ans,则最低分为2*n-ans。var a,b,c,d,aa,bb:array [0..100005] of longint; n,i:longint;procedure kp1(原创 2017-03-02 17:10:19 · 277 阅读 · 0 评论 -
bzoj1802: [Ahoi2009]checker
传送门 如果两个1之间不相邻, 那么第一问是偶数位上0的个数,否则是偶数位上1的个数。 否则就存在有连续1的情况 这种情况下,两个连续的1就可以到达任何一个位置,所以是不需要提前放置棋子的。 第二问先找到连续区间,对于每个连续区间向左向右判断其最少值 注意:如果第一和第二位置为1是不能算计第二种情况下的#include<cstdio>#include<cstdlib>#include原创 2017-06-13 21:17:12 · 484 阅读 · 0 评论