
(~ ̄▽ ̄)~HDU
美团外卖
乘风破浪
展开
专栏收录文章
- 默认排序
- 最新发布
- 最早发布
- 最多阅读
- 最少阅读
-
HDU2476(区间DP)
题目 话说,这区间DP怎么能这么毁天灭地的难啊。 (达成成就,被爆锤X6) 题意: 给定两个字符串A,B,要把A串变成B串,你可以选择任意一个区间,然后将这个区间之内的字符全部变成某一个你想要的字符。题解: 先不用考虑如何从字符串A变成B,直接计算由空串制作一个字符串B需要多少花费,然后再考虑将A转变。 先考虑由空串制作字符串B dp[i][j]代表使区间i~j成为B串i~j的最...原创 2018-04-26 20:55:01 · 376 阅读 · 0 评论 -
HDU1429(状态压缩+BFS)
题目链接 胜利大逃亡(续) Time Limit: 4000/2000 MS (Java/Others) Memory Limit: 65536/32768 K (Java/Others) Total Submission(s): 9864 Accepted Submission(s): 3556Problem Description Ignatius再次被魔王抓走了(搞不...原创 2018-03-14 19:06:36 · 229 阅读 · 0 评论 -
hdu5965 2016CCPC
传送门题意:中文题题解:在做这个题的时候的困难无非就是确定每一列上有多少个地雷,每一列上最多只有0,1,2三种情况。那么我们可以通过枚举第一列的情况,那么在第一列上有多少地雷我们已知的情况下,可以通过第一个数字确定第二列有多少地雷,然后可以通过第二列的数字和第一列第二列上地雷的数目确定第三列有多少地雷。全部统计下来,然后计算就可以了。#include<bits/stdc++.h>using nam原创 2017-10-11 19:19:32 · 256 阅读 · 0 评论 -
hdu6201(拆点加最长路)
题目做题时候只想到最短路,疯狂超时,然后。。。。 还有最长路?还是spfa。。。菜哭了。建立一个源点和汇点,然后源点到每个点的权值是点权,然后每个点到汇点的权值是负的点权,每个点之间的权值是负的边权,跑一个最长路。#include<bits/stdc++.h>using namespace std;int used[100005], head[100005], low[100005],a[10原创 2017-09-12 19:42:48 · 197 阅读 · 0 评论 -
hdu3666(差分约束)
题目题意:给你一个N*M的矩阵C,再给你一个L,U,问是否存在a1,a2.....an和b1,b2.....bna_1,a_2.....a_n和b_1,b_2.....b_n,使得L<=Cij∗ai/bj<=RL<=C_{ij}*a_i/b_j<=R题解:看到不等式就想起来差分约束,但是差分约束只能解决A−B>=CA-B>=C的问题,乘除怎么转化为加减?取对数。 取对数: L/(Cij)<=(a原创 2017-10-07 14:19:52 · 385 阅读 · 0 评论 -
hdu5889(最大流+最短路)
传送门题解:给一幅图,在这幅图的最短路上求最大流。先跑一边最短路,然后将最短路上的边建图,跑一边最大流就好了。 建图我是用dist[u] + 1 ==dist[v]来判断他是不是最短路上的边的。(弱智WA了一发。强行另存了一次边,然后强制将最短路上点标号小的向点标号大的建边。)#include<bits/stdc++.h>using namespace std;const int MAXN=1原创 2017-10-11 20:38:38 · 461 阅读 · 0 评论 -
HDU1533(网络流)
题意:给你一幅图,里面得m代表人,H代表房子,问所有人都到达房子需要花多少步。题解:看到这个题我立刻想起了POJ3057,不过这个题没有时间,只是求花多少步。相较之下简单一点,那就可以对每个人来说,对每个房子建一条容量为1,花费为距离的边,然后超级源点S到每个人建容量为1花费为0的边,每个房子对超级汇点建容量为1花费为0的边,跑一边费用流就好了。#include<bits/stdc++.h>usi原创 2017-10-18 15:09:58 · 370 阅读 · 0 评论 -
hdu5988(网络流)
链接题意:一个网络流的图,有n个点,从1~n,然后m条边,每个点有两个值,一个是人的数量一个是饭的数量。每条边有容量,还有走上去可能踩断电线的几率。问让所有人吃到饭的前提下断电线的最小概率是多少。 题解: 踩断电线的最小概率就是1-没踩断电线的最大概率。那就可以把一条路上的所有可能性乘起来就好,最小费用流没法处理乘法,就要取对数。要求最大概率就可以取相反数求费用流。求最短路的时候松弛要用eps。原创 2017-10-17 20:44:18 · 334 阅读 · 0 评论 -
HDU3572(最大流)
题意:有n个任务,m台机器,每个任务有完成需要天数p,开始时间s和截止时间e。每台机器每天只能处理一个任务。问能否将所有任务完成。题解:一开始想麻烦了。做了半天。 只需要将源点与任务I之间连一条容量为P的边,然后把每一天作为一个点,每个任务向它对应的S~E连一条容量为1的边,每一天向汇点连一条容量为m的边跑最大流就可以了。#include<bits/stdc++.h>using namespac原创 2017-10-18 20:37:42 · 624 阅读 · 0 评论 -
hdu2063(二分图匹配 匈牙利算法模板题)
存一下模板#include<bits/stdc++.h>using namespace std;const int maxn=505;int G[maxn][maxn],vis[maxn],pre[maxn];int k,m,n,temp1,temp2,sum;bool found(int x){ for (int i = 1;i <= n;i++) { if原创 2017-09-03 19:56:22 · 250 阅读 · 0 评论 -
hdu6214(求最小割最少边数)
题目好像是和hdu3987差不多的?传送门有两种方法: 1、对于所有容量值扩大(边数+1)倍然后+1,跑一边最大流得到的MAXFLOW/(边数+1)即为最大流,MAXFLOW%(边数+1)即最小割的边数。 (强行解释一波:我们可以将这个图里额外加的1作为最后计算,也就是如果最后某条增广路的1被拿走了那这就是最小割边之一) 2、跑一边最大流,然后把残量网络里的容量为0的边改为1,其他的边的容量改原创 2017-09-19 20:46:46 · 965 阅读 · 0 评论 -
hdu3987(最小割最小边数)
题目题解:与hdu6214基本相同 传送门题解:#include<bits/stdc++.h>using namespace std;const int MAXN = 100010;//点数的最大值const int MAXM = 400010;//边数的最大值const int INF = 0x3f3f3f3f;#define ll long longstruct Edge{原创 2017-09-19 20:59:46 · 447 阅读 · 0 评论 -
HDU1495
题目链接中文题。 傻傻的找了好久的规律。我。。。。。。。 而且还没读懂题。。。。。。。 已知(S,0,0)的情况,要求(S/2,S/2,0)的情况(令第一个杯子为大杯子),并且要最小次数,用BFS。 有六种搜索方向,就是三个点的有向完全图。#include<cstdio>#include<cstring>#include<algorithm&g...原创 2018-03-12 20:08:29 · 493 阅读 · 0 评论 -
HDU2553(回溯,N皇后问题)
题目链接中文题。 这个题只需要求10以内的N皇后问题,可以预处理之后直接查询。#include&lt;cstdio&gt;#include&lt;algorithm&gt;#include&lt;cstring&gt;using namespace std;int queen[20];int n,ans;int yes(int h, int i){ for (int...原创 2018-03-14 16:03:16 · 164 阅读 · 0 评论 -
HDU4283(区间DP)
题目链接DP这东西还是一如既往的毁天灭地的难啊。题意:有n个人参加非诚勿扰,每个人都有ninin_i的屌丝值,如果前面有k个人比他早,他就会有(k−1)∗(ni)(k−1)∗(ni)(k-1)*(n_i)的屌丝值,你可以让一些人进入一个小黑屋,来改变上场顺序,但是小黑屋是类似栈,先入后出。题解: dp[i][j]表示i~j区间的最优解。 对于i~j区间来说,第i个人可以第一个上,也...原创 2018-04-25 20:06:00 · 421 阅读 · 0 评论 -
HDU1864(01背包)
题目链接题意:中文题,但是注意单项是一类的意思。题解:根据题意筛出可以报销的发票,做01背包就可以了。输入的处理比较麻烦。#include<cstdio>#include<algorithm>#include<cstring>using namespace std;const int maxn = 35;const int maxm = 3...原创 2018-04-21 19:21:57 · 230 阅读 · 1 评论 -
HDU4272(DFS+优化小套路)
题意:给一个数字栈,用栈顶的元素和与他下面距离小于(或等于)6的相同元素进行。。。连连看中的消除。然后被消除元素之上会都“落”下来。问能否全部消掉。题解:直接暴力dfs,然后用map存下每个数出现的次数,如果有不是偶数的就说明一定不能全部消掉。这个用map计数因吹斯听,这里MARK一下。 据说这题可以状压DP做,学习之后试试。#include&lt;cstdio&gt;#include...原创 2018-04-19 19:42:59 · 210 阅读 · 0 评论 -
HDU2859(DP)
题目链接题意:给你一个字符矩阵,找一个沿着右上左下对角线对称的子矩阵,求子矩阵最大边长。题解:枚举每一个点作为左下角的情况,然后枚举这个点所在行右边和所在列上边的相同的点对数,和右上角的dp值+1进行比较,取小值。没有想出来,为什么做了一些题之后感觉没有一点进步。。。。。。 不过这个题的写法感觉真的很惊艳。#include<cstdio>#include<...原创 2018-04-17 21:25:27 · 330 阅读 · 0 评论 -
HDU1078(记忆化搜索)
题目链接题意:整个NXN的矩阵中每个位置都有一块奶酪,有一只老鼠从(0,0)出发,横着或者竖着最多走k步,并且只能在当前奶酪大于出发位置的奶酪时候才能停在这里。问最多能吃大奶酪。 没弄懂题意,我以为是横着+竖着可以走k步,也就是可以交叉走。所以不会。。所以,重点在于either,是二选一的意思。。? 题解:记忆化搜索一下就好了(没写出来)#include&lt;cstdio&gt;#...原创 2018-04-17 20:16:42 · 277 阅读 · 0 评论 -
HDU1069(最长上升子序列)
题目链接这个题题意难一半。 表示看题看了好久。 题意:给定n种长方体,给定长方体长宽高,每个长方体有无限个,要堆成塔形,问最高能堆多高。下面的必须长宽均大于上面的。题解:每个长方体怎么放是没有限制的,也就是说一个长方体可以有六种方法(刚开始我对这个存疑,但是亲手摆摆试试就知道了),也就是说我们最多将一个长方体可以扩展成六个,然后排个序,求最长上升子序列就可以了。#include...原创 2018-04-10 20:57:17 · 249 阅读 · 0 评论 -
HDU1087(最长上升子序列)
题目链接一个最长上升子序列,只不过把长度换成和。#include<cstdio>#include<cstring>#include<algorithm>using namespace std;#define ll long longll num[1005],dp[1005];int n;int main(){ while(~s...原创 2018-04-11 20:25:01 · 233 阅读 · 0 评论 -
HDU1074(状压DP)
题目链接题意:有n门课,每门课都要交作业,作业有时间花费和最晚提交日期,如果超过日期交作业,每超过一天就要扣一分,问最少扣多少分并且给出最少扣分的方案。题解: 因为最多只有15门课,所以可以压缩成一个数,二进制位上每一位代表一门课是否完成。然后开始DP。 枚举从1到1<< n的每一个状态i,然后枚举每一门课j(倒叙枚举,因为输入是按照字典序递增输入的),检查状态i是否完成了...原创 2018-04-11 19:59:06 · 478 阅读 · 0 评论 -
HDU1176(DP)
题目链接以前做过的一道题,再做依旧很费劲,动态转移方程不难写,但是在细节卡了好久。很气。 因为初始位置在5,所以一开始就从5模拟4次拿馅饼的位置,然后后面都一样了,最后在最大时间内找馅饼数最大。后来发现倒着推更简单。 设最最后一块馅饼是m时落下,那么从m-1时开始,dp[i][j]+=max(dp[i+1][j],dp[i+1][j−1],dp[i+1][j+1])dp[i][j]+=ma...原创 2018-03-16 20:26:59 · 146 阅读 · 0 评论 -
HDU1024(DP)
Max Sum Plus PlusTime Limit: 2000/1000 MS (Java/Others) Memory Limit: 65536/32768 K (Java/Others) Total Submission(s): 12589 Accepted Submission(s): 4146Problem Description Now I think you...原创 2018-03-20 20:53:11 · 230 阅读 · 0 评论 -
HDU5884(K叉哈夫曼树 + 二分)
题目链接题意:给了你n个数,要把这n个数合成一个,每次可以拿k个,每次拿数的权值是所拿数之和,比如3 4 4三个数每次可以拿2个,那就是(3+4)+(3+4+4)。 求最后权值总和不超过m的最小k。用2叉哈夫曼树疯狂tle,竟然还有k叉这种东西。 尽管在这个问题中k叉已经比2叉快了很多,但是还是需要二分枚举k的最小值,不然还是会超时。 k叉哈夫曼树大概就是用两个数组a,b来模拟哈夫曼...原创 2018-03-26 21:25:04 · 287 阅读 · 0 评论 -
hdu6208(cin取消同步)
题目题意:要寻找一个串是其他所有串的母串,如果有输出这个串,如果没有就输出No。 题解:(鶸一个,并不会AC自动机。。。。。然后发现了新大陆)string本身自带查找子串的函数,string.find(),但是cin输入30MB的数据绝对会超时,然后就看到了这样一个黑科技:cin.sync_with_stdio(false); 详情看这里:大佬博客orz 然后cin输入数据的速度就大大加快了,原创 2017-09-19 21:16:26 · 1444 阅读 · 0 评论 -
2017第一次多校联合Balala Power!
题目题意:给了你许多字符串,要给他们赋权值,对应成了许多个26进制数,然后求和,求最大。(ps:不能有前导零)思路:首先要选择赋最大值,如何选取最大值对应的字母呢?首先先存下每一位上的每种字母出现的次数,但是这样选择也不是很容易选取,所以需要进位,即如果某一位上一个数字出现次数超过了26次,那么比他高一位的+1,它这一位减去26. 。进位这里要注意,数组要开大一点,因为有可能正常处理完的最高位的数也原创 2017-07-26 14:51:35 · 381 阅读 · 3 评论 -
2017第一次多校联合 1011KazaQ's Socks
题目题意:要穿袜子,你有n双袜子,袜子有编号,然后问第几天穿第几双袜子。做法:把345双袜子的10天内穿法,找到了不像是规律的规律,强行写。 前n-1天正常穿,第n天穿第n双,第k*n(k>=2)天穿第n-1双。 每n-1是一个周期,每一个周期内穿法是x,1,2,….,x和第几个周期有关,如果是偶数个则是n,如果是奇数个则是n-1;#include<cstdio>#include<algori原创 2017-07-26 15:00:37 · 418 阅读 · 0 评论 -
2017第四次多校联合hdu6078
题目题意:给你a,b两个序列,想要找出两个序列f,g(均为递增序列),使afi=bgia_{f_i}=b_{g_i},且af1,af2......afna_{f_1},a_{f_2}......a_{f_n}是波浪型},计算·有多少种f,g序列。题解:固定aia_i,去找bib_i,只需要考虑相等的情况,不相等的情况只需要相加就好了。 波浪一定会有波峰和波谷,如果对于一个aia_i来说,如果在b中原创 2017-08-08 09:53:24 · 334 阅读 · 0 评论 -
2017第四次多校联合hdu6070
题目(比赛的时候题意读错了好几次,终于最后明白了题意的时候,wtf,这是什么,怎么做。不知道。。。。泪。。。 然后比赛完了,看到群里好多大神在说这是一眼题。。。心好累,我怎么这么菜) 题意:给你一个序列,数字代表题号,然后这是提交的情况,让你从中选取一个序列,问那时的正确率最低。题解:正确率即size()r−l+1≤mid\frac{size()} {r-l+1} \le mid,这里的size原创 2017-08-08 10:20:22 · 366 阅读 · 0 评论 -
2017多校联合第6次hdu6105Gameia
题意:有一颗大小为n的树,有两个人A,B可以在树的节点上涂颜色,A涂白色,B涂黑色,B是VIP,所以B在一个节点涂色之后与这个节点相连的节点也会变成黑色,然后B拥有k个可以切除一条边的机会。题解:n为奇数必败。这个自己写一写就知道。然后n为偶数的时候,用vis数组记下节点i作为父节点的次数,然后用结构体数组存下i的儿子和i的儿子个数,再去便利i的儿子有没有作为父节点的情况。 这里其实是找这个树中是原创 2017-08-10 16:40:06 · 480 阅读 · 3 评论 -
2017第六次多校联合hdu6103
题目题意还是比较好理解的,就是求小于所给m的最大dis的子串最大长度。题解:首先正方向枚举每一个点,固定这个点作为开始的左边界。然后分别从这个左边界和最后一个点开始拿,直到dis>m,这时候更新长度最大值,然后把已经前面已经拿的点减去,直到dis#include<bits/stdc++.h>using namespace std;const int maxn=5000+100;char s[m原创 2017-08-11 14:37:37 · 273 阅读 · 0 评论 -
第七次多校联合hdu6130 Kolakoski
题目据说这是签到题。完全没看这个题(估计看了也不一定会。。)名字居然就是这个序列的名字,甚至还有百度百科?因吹斯听。(高中生好强大。。。。)百度百科就是根据这个位置的值去给序列尾加元素,这个位置的值控制加几个,序列尾元素控制下一个是什么。#include<bits/stdc++.h>using namespace std;vector<int> a;const int maxn=1e7+2;原创 2017-08-15 19:42:56 · 294 阅读 · 0 评论 -
第七次多校联合hdu6127
题目题意:平面直角坐标系上有nnn个整点,第iii个点有一个点权vali,坐标为(xi,yi)(x_i,y_i)(xi,yi),其中不存在任意两点连成的直线经过原点。这些整点两两之间连有一条线段,线段的权值为其两端点的权值之积。你需要作一条过原点而不过任意一个给定整点的直线,使得和这条直线相交的线段的权值和最大。题解:按斜率排序(如果不额外存下斜率的话需要重载运算符,否则会超时),枚举每原创 2017-08-16 11:13:24 · 294 阅读 · 0 评论 -
第七次多校联合hdu6129Just do it(题名好棒)
题目(有点小感言说一下吧,在刚看这个题的题解的时候,没有好好理解消化,看不懂,所以总是觉得别人的博客写的不好,但是真正弄懂了之后,觉得别人写的就很对了,错还是自己身上,所以还是努力提高自己吧。)题意:给一个a序列,然后进行m次前缀异或,得到b序列。题解:先找一下规律: (字母后面的数字是表示个数)容易得出第i行第j个等于第i-1行第j个加上第i行第j-1个。 那规律就是:原创 2017-08-16 19:14:50 · 215 阅读 · 0 评论 -
第七次多校联合hdu6121Build a tree
题目题意:有一棵nnn个点的有根树,标号为000到n−1n-1n−1,iii号点的父亲是⌊i−1k⌋\lfloor\frac{i-1}{k}\rfloor号点,求所有子树大小的异或和。题解:思路和代码都来自这个人→传送门但是这位大佬好像没有提到满k叉树,好像弄错了完全k叉树的定义。。。。。。(不敢造次)大致思路就是分别讨论满k叉树的情况和完全k叉树的情况。递归一下。代码还是比较好弄明白的。 (大致原创 2017-08-17 11:04:25 · 332 阅读 · 0 评论 -
2017第八次多校联合hdu6140(阅读题)
题目题意:就是给你一些数,如果他对应的是N那他可以加也可以减,如果是L就是加,如果是D就是减。题解:(出题人好强啊。。。愣是用这么长的题面和语言陷阱干死了好多人。。。。)(比赛时候一直在怼1002,看了题解才知道原来这不是我能做的题,好想哭啊。。ORZ)。 就是按他给的所有的值扩大区间,最后看看k在不在区间里就好了。 具体多项式的理解:大佬博客 (但是也学到东西了,原来用%c读入的时候前面加一原创 2017-08-17 20:59:51 · 277 阅读 · 0 评论 -
2017第八次多校联合hdu6143
题目题意:m个颜色,两个涂色板格子数均为n,要在两个涂色板上涂色,要求两个涂色板上没有相同颜色,求有多少种方式。题解:第二类Stirling数来做。 第二类Stirling数 S(p,k) S(p,k)的一个组合学解释是:将p个物体划分成k个非空的不可辨别的(可以理解为盒子没有编号)集合的方法数。k!S(p,k)是把p个人分进k间有差别(如:被标有房号)的房间(无空房)的方法数。假设第一个涂色板原创 2017-08-18 16:57:50 · 291 阅读 · 0 评论 -
2017CCPC网络赛1005 hdu6154 CaoHaha's staff
题目找规律题目,当时有些思路,但是懒得写了。 后来看了看别人博客,发现有更成熟的思想。 传送门 从面积为2的正方形能推出以后全部的。每四个笔画一个循环。 第一笔和第三笔都是向外“凸”出,凸出的大小是x1,从0.5开始每次循环的第一笔+1. 第二笔和第三笔都是比最开始加了一个正方形,也就是x2,从2开始,每次循环的第二笔+2.(看了pz大爷的代码风格,好优美,学习一下。)#include<b原创 2017-08-21 16:05:19 · 302 阅读 · 0 评论 -
2017第三次多校联合hdu6058
题目 题意:给你n,k和序列A,求∑nl=1∑nr=1f(l,r,k)\sum_{l=1}^n \sum_{r=1}^nf(l,r,k)题解:便利数组元素,找每一个点aia_i左右各K个比它的大的数,记下与 aia_i的距离,然后组合一下看看有多少种可能能组成使aia_i成为第K大数,然后求和。 ps:这个方法是巧妙的暴力。如果运气不好会超时。。。#include<bits/stdc++.h>原创 2017-08-04 20:34:52 · 370 阅读 · 0 评论