贪心
文章平均质量分 53
HT008_123
家人们点点关注叭
展开
-
[ICPC2019 南昌站] Bob's Problem
题目描述:有N个点,M条边边有权值和颜色(黑色 白色)最多选K条白边,黑色边数量不限,问在保证选出的边让图联通的情况下,边取值和最大题目分析:由于黑色边没有限制数量我们可以先把所有的黑色边扔进去,做克鲁斯卡尔然后把白边按照权值降序排列第一次我们先尽量保证图联通,因此当边链接的点不在一个连通块的时候取这条边。记录当前用白边的数量然后判断能否用少于等于K让图联通如果白边还有剩余,我...原创 2019-12-08 23:46:09 · 212 阅读 · 0 评论 -
水题
部分 分 DFS 50 贪心贪错了。正解: 贪心+牛B的数据结构贪心原则:先把第一个序列和第二个序列以x为第一关键字,y为第二关键字升序排列。对于第一个序列的一个X,在第二个序列中找出 所有 X小于第一个序列的X 在这些中去找一个Y与第一个序列Y最接近且小于第一个序列Y的元素。 也就是尽量重复利用第一个序列牌的X Y问题,怎么实现? 把所有小于小于x1的第二个序列元素的Y扔进一个set容器里原创 2017-11-02 17:05:42 · 225 阅读 · 0 评论 -
10-24机房测试
出现的问题: T1我贪错心了。。。。。。 T2是从1-k任何一个房间走都可以走到1,k+1-n任何一个走不能走到1. 我理解反了,理解成了存在性问题,写出来的爆暴力样例都过不了。。。 T3人家巨人只能往前跳,我认为可以往后跳。于是我认为这题太麻烦了,做个屁啊。 然后今天就GG了 很绝望啊。T1 小G搭积木题目描述 小 G 喜欢搭积木。小 G 一共有 n 块积木,并且积木只能竖着一块一块原创 2017-10-25 10:44:49 · 262 阅读 · 0 评论 -
集合
集合 【问题描述】 给定一个可重集合,一开始只有一个元素 0 。然后你可以操作若干轮,每一 轮,你需要对于集合中的每个元素 x 进行如下三种操作之一: 1 、将 x 变为 1 + x 。 2 、将 x 分裂为两个非负整数 z y,,且满足 x=y+z。 3 、什么都不做。 每一轮,集合中的每个元素都必须进行上面三个操作之一。 对于一个最终的集合,你的任务是判断至少进行了多少轮。 【原创 2017-11-01 13:54:15 · 510 阅读 · 0 评论 -
Perm
暴力:40 算出所有的全排列即可。 正解: 先考虑这样一个问题,如何在O(n)的时间内求出一个排列的排名? 定义Rank[i]表示i位置上在a[1]-a[n] 中的排名。(从0开始计数) 很明显。 一个序列的排名即为a[n] * (n-1)!+a[n-1] * (n-2)!+… 很明显,如果我们暴力计算出来,这个数会很大。 对于第二个序列,也有上面的式子成立。 那么我们提出两个式子原创 2017-10-24 14:09:19 · 275 阅读 · 0 评论 -
日记+洗澡
洗澡的地方,有一段括号序列,将一个括号修改一次需要1的代价(将左括 号变成右括号或者相反),求最小代价使得括号序列合法。 【输入格式】 一行一个括号序列。 【输出格式】 一行一个整数代表答案。 【样例输入】 ())( 【样例输出】 2 【数据范围与规定】 50%的数据,括号序列长度不超过100。 对于100%的数据,括号序列长度不超过10 5 且一定为偶数,只包含小括 号右原创 2017-10-31 17:30:34 · 894 阅读 · 0 评论 -
少女
少女在图上开车,她们希望把图上每条边分配给与其相连的点中的一个, 并且每个点最多被分配一条边,问可能的方案数。 【输入格式】 第一行两个整数 N ,M代表点数和边数。 接下来N行每行两个整数代表一条边。 【输出格式】 一行一个整数代表答案对10 E9 + 7取模之后的值。 【样例输入】 5 4 1 2 3 2 4 5 4 5 【样例输出】 6树中方案为size,有环即为2原创 2017-10-31 17:25:02 · 706 阅读 · 0 评论 -
入阵曲+将军令
QAQ 性质,如果一个 a1%k==a2%k,那么这两个数的和就是k的倍数 预处理矩阵和,然后枚举2个行,1个列 转换成上面的问题#include <cstdio>#include <iostream>#include <cstring>#define ll long longusing namespace std;ll map[500][500],s[500][500];ll cn原创 2017-11-07 20:51:30 · 376 阅读 · 0 评论 -
Massacre at Béziers+赤の夜
等差数列求和,算出多少个整周期。 二分或解方程#include <cstdio>#include <iostream>#include <cmath>#define ll unsigned long longusing namespace std;ll n,t;bool check(ll a,ll d1,ll mid){ ll c=2; ll ans=a*mid+((原创 2017-11-08 14:29:03 · 349 阅读 · 0 评论 -
10-30上午测试(DAY 2 R1)
T1 暴力70 正解DP+贪心(QAQ) 本来写对了,理解错题意了。 DP[i][j]表示跳了i个楼,目前在j楼的最小花费。 首先我们的DP是从1->n的。 那么我们会想顺序会不会产生影响。 显然是会的 比如 1高度3 2为1 3为3 顺序跳显然不如1->3->2优。 所以先把楼按照高度升序或者降序排列。显然dp[0][i]=c[i] 转移dp[i][j]可以从1->(j-1)原创 2017-10-30 16:17:19 · 374 阅读 · 0 评论 -
文化之旅
QAQ DFS 爆搜+剪枝#include <cstdio>#include <iostream>#include <cstring>#include <queue>using namespace std;bool vis[10001];bool ok[10001][10001];int dis[10001],w[1001];int head[200000],net[200000]原创 2017-11-08 09:13:13 · 336 阅读 · 0 评论 -
大奖赛+秘密信息
30爆搜,60 01背包,100折半搜索。#include <cstdio>#include <iostream>#include <algorithm> #define ll long longusing namespace std;ll a[50],b[50]; ll n,k,t,w;ll f[9999999],cnt,ans;void dfs1(ll x,ll c){原创 2017-10-23 11:09:16 · 214 阅读 · 0 评论 -
P1966 火柴排队
肯定是大的跟大的搞,小的跟小的搞。 把第一个序列的位置记下来,第二个也记下来。 然后排序,把第一个数组中的位置映射到第二个里去,然后就求逆序对就行了。#include <cstdio>#include <iostream>#include <algorithm>#define ll long longusing namespace std;struct node{ int va原创 2017-10-17 11:18:20 · 260 阅读 · 0 评论 -
[POI2011] ROT-Tree Rotations
题目描述:qwq…题目分析:一棵树中的逆序对个数=左子树的+右子树的+跨越形成的 我们只要比较一下交换之后和之前跨越的逆序对个数,取小即可… 权值线段树+线段树合并题目链接:BZOJ 2212 Luogu 3521Ac 代码:#include <cstdio>#include <algorithm>#include <...原创 2018-05-14 09:33:21 · 342 阅读 · 0 评论 -
[HAOI 2007]上升序列
题目描述:QAQ…题目分析:设 F[i] 为 以 i 为开头最大的上升子序列长度 可以 NlogNNlogNNlogN 求,不再概述了 然后对于每个查询,我们 O(n)O(n)O(n) 去扫 当F[i]>=k 并且大于上一个数的时候,这个数即为我们要求的数列项之一,由于我们是从前往后扫的,所以字典序有保证,不要忘了把长度减小1 线段树完全可以用树状数组代替,然后我闲得慌......原创 2018-05-13 16:46:05 · 201 阅读 · 0 评论 -
[国家集训队] 特技飞行
题目描述:QAQ…题目分析:打了个表发现,一个动作只要确定了第一次做的时间,最后一次做的时间,中间做几次价值都没有影响,那么我们就把每个动作的价值排序,对于价值大的动作让他的时间间隔大就好了…题目链接:Luogu 3918Ac 代码:#include <cstdio>#include <algorithm>#include <...原创 2018-05-09 15:52:52 · 224 阅读 · 0 评论 -
[TJOI2014]Alice and Bob
题目描述:定义一个序列 x1,x2...xnx1,x2...xn{x_1,x_2...x_n} a序列a1,a2...ana1,a2...an{a_1,a_2...a_n}表示以i为结尾的最长上升子序列的长度 b序列b1,b2...bnb1,b2...bnb_1,b_2...b_n表示以i为开头的最长下降子序列的长度 求在满足a序列的情况下Max(∑ni=1bi)Max(∑i=1nbi)...原创 2018-04-09 18:51:15 · 388 阅读 · 0 评论 -
[ZJOI2007] 时态同步
题目描述:雾。题目分析:正解:树形DP 非正解:XJB DFS 记录maxtime[i]为以i为根的子树叶子节点距离i的最大时间 我们只需要用两次DFS即可求解答案题目链接:Luogu 1131 BZOJ 1060Ac 代码:#include <iostream>#include <cstdio>#define ll ...原创 2018-04-02 08:37:58 · 175 阅读 · 0 评论 -
吃巧克力
QAQ 二分答案 坑点: 1:最后剩下的巧克力最后吃 ~~2:先输入总巧克力数,然后再输入天数(哭)~~ 3:别忘了搞方案(更傻)#include <cstdio>#include <iostream>#include <cmath>#include <algorithm>#define ll long longusing namespace std;ll g[99999],t原创 2017-11-05 15:33:33 · 339 阅读 · 0 评论 -
雷达安装
QAQ 将问题稍微进行转化:将基站设为覆盖半径为 D。 则问题变为:每个基站的覆盖区域必须要有雷达 又因为雷达只能放在 X 轴上,所以每个基站覆盖的其实是一条线 段。 则问题变为:每条线段上必须要要有雷达 先把线段按照右端点排序; 对于最早的没有雷达的线段,把一个雷达放在它的右端点。 更新后面的雷达多少被覆盖到#include <cstdio>#include <iostream原创 2017-11-05 14:46:51 · 429 阅读 · 3 评论 -
过河问题
QAQ 先假设有4个人 四人所需要的时间分别是1、2、5、8分钟 策略1:让最小的送最大的,尽量减少回来的时间 先让甲乙过去(2分钟),甲回来(1分钟),甲丙过去(5分钟),甲回来(1分钟),甲丁再过去(8分钟),总共需要17分钟就可以让四个人都过去。 策略2:让最慢的两个人同时过桥,让已经过桥的人来担负送手电筒的责任 而正确答案是第二种办法:先让甲乙过去(2分钟),甲回来(1分钟),丙原创 2017-11-05 11:26:19 · 576 阅读 · 0 评论 -
函数最值
贪心,负数为搞成0不选即可。#include <iostream>#include <cstdio>#include <cstring>#define ll long longusing namespace std;const int maxm=110000;ll a[maxm],sum[maxm];char s[maxm];ll x=0;int main(){ int原创 2017-11-05 08:37:38 · 333 阅读 · 0 评论 -
纸牌+后缀数组
纸牌 题目描述 在桌面上放着n张纸牌,每张纸牌有两面,每面都写着一个非负整数。你的邪王真眼可以看到所有牌朝上的一面和朝下的一面写的数字。现在你需要将一些牌翻过来,使得所有牌朝上的一面中,至少有一半(≥n/2)的数字是一样的。请你求出最少需要翻几张牌,或者判断无解。 注意:在翻牌的时候,你不能把牌扔掉,不能偷偷把别的牌放进来,也不能用笔涂改牌上面的数字。输入格式 第一行包含一个整数n原创 2017-11-04 14:02:52 · 798 阅读 · 0 评论 -
10-29测试(QB DAY1)
立方数(cubic) Time Limit:1000ms Memory Limit:128MB题目描述 LYK定义了一个数叫“立方数”,若一个数可以被写作是一个正整数的3次方,则这个数就是立方数,例如1,8,27就是最小的3个立方数。 现在给定一个数P,LYK想要知道这个数是不是立方数。 当然你有可能随机输出一些莫名其妙的东西来骗分,因此LYK有T次询问~输入格式(cubic.in)原创 2017-10-29 11:41:08 · 445 阅读 · 0 评论 -
洛谷八连测R4
T1 瞎搞。 T2 链表。 T3 贪心。T2#include <cstdio>#include <iostream>#include <algorithm>using namespace std;int a[100010];int cnt;bool vis[100010];int main(){ freopen("wa.in","r",stdin); freope原创 2017-10-28 15:22:56 · 333 阅读 · 0 评论 -
加分二叉树
QAQ 递归分根节点去求最大值,记录每个区间最大值的节点,记录下来。 递归输出。 记忆化搜索AC#include <cstdio>#include <iostream>#define ll long longusing namespace std;ll a[99999];ll ss[99999];ll maxd[999][999],root[999][999];ll dfs(in原创 2017-10-20 15:47:12 · 302 阅读 · 0 评论 -
循环移动
很简单,直接暴力模拟就行了,k对len取个模更快#include <cstdio> #include <iostream>using namespace std;char s1[19999];char s2[19999];int main(){ freopen("cyclic.in","r",stdin); freopen("cyclic.out","w",stdout)原创 2017-07-28 10:44:46 · 634 阅读 · 0 评论 -
母舰
QAQ#include <cstdio>#include <iostream>#include <algorithm> using namespace std;int f[100010];int g[100010];bool w[100010];int js(int l,int r){ int ans=0; for(int i=l;i<=r;i++) if(原创 2017-08-19 09:38:29 · 287 阅读 · 0 评论 -
P2094 运输
QAQ 题意明确,就是每次取两个最大值,和/k再放入堆中,循环n-1输出最后的元素即可#include<cstdio>#include<cstring>#include<algorithm>#include<queue>using namespace std;priority_queue<int> q;int main(){ int n,k; scanf("%d%d"原创 2017-08-11 20:03:04 · 311 阅读 · 0 评论 -
毕业考试
妥妥的贪心,将花费升序排列,直接模拟即可!#include <cstdio>#include <iostream>#include <algorithm>using namespace std;long long n,r,v;struct tw{ long long s; long long r;}a[100100];int comp(const tw&x,const原创 2017-07-27 14:44:49 · 228 阅读 · 0 评论 -
P2629 好消息,坏消息
QAQ 解法1: 前缀和最小值+后缀和+后缀的前缀和最小值(是不是特别绕) qmin[i]表示1-i的前缀和最小值,hz[i]表示i-n的和 hmin[i]表示i-n的前缀和最小值,注意,前缀是从i开始 前两个数组都好处理,但是最后一个咋处理呢 hmin[i]=min(a[i],a[i]+hmin[i]) 因为hmin[i]中一定包含a[i],而hmin[i]无外乎两种情况,一个是单独原创 2017-08-11 10:38:52 · 466 阅读 · 0 评论 -
P1007_独木桥
传送门 解题思想:仔细考虑会发现,两个人相遇无论转不转身两个人所走的 总路程 都是一样的,那么时间也都一样,所以我们大可让两个士兵相遇后继续直走。 代码实现:对于每一个士兵,只有向左或向右两种选择对吧。那么最大值也就是max(向左走所用时间,向右走所用时间),最小值也是一样。 注意:有一个细节要考虑到,因为每一个士兵是同时开始走,而不是一个一个走。所以max/min(向左走所走路程,向右走所走原创 2017-08-10 16:51:16 · 505 阅读 · 0 评论 -
UOJ 赴京赶考
传送门 思路:预处理+化二维为一维 如果ai!=ai+1,那么不论怎么走,到 i+1,j一定会浪费体力 对于bi也如此,于是拆了二维为一维,每次查询时对于x,y分别求最短路,然后加起来就行了 注意可以直接从n->1,m->1,要考虑这种情况,还有是从两者中间的路过去,两种情况取最小值#include <cstdio>#include <iostream>using namespace s原创 2017-08-17 20:44:35 · 346 阅读 · 0 评论 -
做游戏
小小的贪心,我们直接把边的权值分到点上去,然后排序,相邻的减,这样就是差值最小了#include <iostream>#include <cstdio>#include <algorithm>using namespace std;double a[11000];int main(){ freopen("game.in","r",stdin); freopen("game原创 2017-07-26 11:20:56 · 252 阅读 · 0 评论 -
小小粉丝度度熊
传送门 太坑了。。。。 一个点并不是一个N,M。被坑了好半天 首先要先合并区间,将输入的区间以L为第一关键字,R为第二关键字排序 首先把第一个区间加入进去,然后枚举区间,如果枚举区间的L<=当前区间R+1,就将枚举的区间扔进此区间去,R取MAX 如果L>当前区间R+1证明区间断开,直接把这个枚举的区间作为当前的合并区间(因为L升序排列) 然后就是求最优方案了,首先我们连接的区间肯定是连续原创 2017-08-17 16:36:53 · 177 阅读 · 0 评论 -
Code_vs_1959_拔河比赛
传送门 一道看似是贪心实则是DP的题目,只是DP的不直接是答案 设DP[i][j]为用i个人能否能达到j的重量(还有一维用滚动数组搞掉了) DP[i][j]=DP[i][j]||DP[i][j-w[k]],初始状态DP[0][0]=DP[1][0]=1 然后找n/2个人所能达到最接近∑w/2的体重就行了#include <cstdio>#include <iostream>#includ原创 2017-08-10 14:44:40 · 312 阅读 · 0 评论 -
阅读计划
这道题目是一道贪心题,我们分析一下,如果一本书第二次出现,或者是第三次出现~~~~这本书需要看的花费是固定的,就是距离它上次看时中间看的书,所以说,我们对于序列的安排所决定的初始状态对他们没有影响,花费是固定的,于是我们只需要考虑如何让看一本书第一次时花费最小,很明显,我们让先读的书安排在上面代价肯定最小,因为即使把这本书安排在第二位置,读完之后它依然会在头顶上,对后面没有贡献,但是代价多花了,于是原创 2017-07-28 10:53:36 · 274 阅读 · 0 评论 -
P3817_小A的糖果
QAQ 如果两个的和>x,那么吃后面的不吃前面的,因为后面的会对下一个有影响,需要注意的是后面的减出去还是>x的情况,不注意可能导致答案过大,注意数据范围,开long long#include <cstdio>#include <iostream>#include <cmath>#include <iostream>#include <cstring>using namespace st原创 2017-08-15 10:53:55 · 244 阅读 · 0 评论 -
洛谷10月月赛R2·浴谷八连测R3 T2
传送门 不能转两次弯说明什么? 把图分成两个部分其实就相当于画一条单调的线。 如下图 如果我们分蓝色的,以上面那一行为最大,那么下面的蓝色的终点是不可以超过上面那行的。 但是蓝色既可以左右延伸,也可以上下延伸。 可以从4个方向出发。 但是写4个分色有些麻烦。 我们可以用从左开始,向右延伸的方法,然后分别把图选择90,180,270. 就可以得到所有的情况了。 得到了图该怎样做?原创 2017-10-28 08:30:09 · 295 阅读 · 0 评论 -
凝视
【问题描述】背包是个好东西,希望我也有。给你一个二维的背包,它的体积是。现在你有一些大小为和的物品,每个物品有自己的价值。你希望往背包里面装一些物品,使得它们的价值和最大,问最大的价值和是多少。【输入格式】第一行一个整数代表该测试点的数据组数。对于每组数据,第一行有四个整数,其中分别代表大小为和大小为的物品个数。接下来一行有个数代表每个物品的价值。接下来一行有个数代表每个物品的价值。原创 2017-10-06 08:19:40 · 275 阅读 · 0 评论