![](https://img-blog.csdnimg.cn/20201014180756919.png?x-oss-process=image/resize,m_fixed,h_64,w_64)
HDOJ
cyl纤云弄巧
To Be
展开
-
HDU 4054 16进制的简单使用
16进制的简单使用题意: 给出一行字符串,有三个要求 把字符串按照16进制输出,第一列是编号 把字符串按照16进制输出,八个16进制为一列 把字符串中小写字母变大写,大写字母变小写 所以说:一共三种需求,分别输出即可#include <iostream>#include <cstdio>#include <cstring>using namespace原创 2017-07-30 15:47:41 · 384 阅读 · 0 评论 -
HDU 4529 状态压缩DP
状态压缩DP题意: Problem Description 郑厂长不是正厂长 也不是副厂长 他根本就不是厂长 还是那个腾讯公司的码农 一个业余时间喜欢下棋的码农 最近,郑厂长对八皇后问题很感兴趣,拿着国际象棋研究了好几天,终于研究透了。兴奋之余,坐在棋盘前的他又开始无聊了。无意间,他看见眼前的棋盘上只摆了八个皇后,感觉空荡荡的,恰好原创 2017-08-18 09:58:39 · 298 阅读 · 0 评论 -
HDU 3811 状态压缩DP
状态压缩DP题意: 有n个不同的数字,现在有m个限制条件,分别是第Ai位数字是挑选的Bi。限制条件至少满足一个。问n个数字全都用到而组成的数字有多少种?思路: 最开始感觉很像组合数,但是写的时候会发现限制条件会发生冲突,比如位置1不能放置2,但是位置3也不能放置2,这样会增加排列组合的难度,使用容斥也可以写出,但是我不会。 考虑到n最多17个,而对于由i个数字组成的数字,可以写出其原创 2017-08-18 17:49:32 · 441 阅读 · 0 评论 -
HDU 6070 二分查找 + 线段树 + 枚举
二分查找 + 线段树 + 枚举题意: ACM-ICPC比赛中提交题目会有很多不同的情况,现在给出一个队伍的全部提交情况,只有AC和WA,以序列的形式给出,相同的数字最后出现的一次便是AC,定义一个区间的DirtRatio=cnt(AC)/sum(submit)Dirt Ratio = cnt(AC)/sum(submit) 也就是整个区间的AC 的数量除以总的提交次数,求出最小的比值是原创 2017-08-04 17:11:37 · 284 阅读 · 0 评论 -
HDU 4734 数位DP
数位DP题意: 定义:F(x)=An∗2n−1+An−1∗2n−2+...+A2∗2+A1∗1F(x) = A n * 2 n-1 + A n-1 * 2 n-2 + ... + A 2 * 2 + A 1 * 1 为一个数子x的权重,现在给出一个数字A,可以求出它的权重,问0~B之间有多少权重小于等于A的权重的数字。思路: 考虑到A的范围,它的权重最大也不超过10000,所以可以定义:原创 2017-08-12 18:20:21 · 188 阅读 · 0 评论 -
HDU 4398 STL + 贪心
STL + 贪心题意: ACM-ICPC赛事上有n,1~n道题,m个模板(1~m),只有对应的模板才能解出对应的题目,现在规则有点改变,当你没有某一道题的模板的时候能从场外求助获得此模板,但是用完之后你需要从m+1个模板中拿出来一个放在外边,总之就是要保持自己只有m 个模板,问最少可以求助几次?思路: 若想最少次,那么可以先考虑当模板不够的时候求助一次,然后再放出去一个模板,该放哪一个呢原创 2017-08-12 19:21:52 · 348 阅读 · 0 评论 -
HDU 6078 (计数DP)
题意: 想在有两个序列a,b。从两个序列中挑出相同数量的数字,按照原本的顺序,有两 个要求。 1. 两个序列相同 2. 序列成波浪,就是第一个数字小,第二个数字大,依次类推,但是第一个数字 一定是最小的 最后问满足这样条件的挑选一共有多少种。思路: 枚举每一个a[i], 算出每一个a[i]为挑出序列末尾的数字的贡献次数,每一个原创 2017-08-05 09:34:15 · 697 阅读 · 0 评论 -
HDU 2196 树形DP + 节点到达的最长距离
树形DP + 节点到达的最长距离题意: 给出一棵树,问每一个节点能到的最远的距离。思路: 题目很简单,意思也很明白,但是如果是想求出一个节点到其它点的最远的距离,只需一次dfs就能知道,此题需要n次dfs,所以还需其它更快的算法。 首先思考一个节点的最远的距离怎么算出? 最远的距离只有两种可能:此节点的儿子在最远的距离上最远距离经过父亲节点第一种很容易算出,而经过父亲节点最原创 2017-08-09 09:03:50 · 376 阅读 · 0 评论 -
HDU 3565 数位DP + 上下界
数位DP + 上下界题意: 定义双峰数:先上升后下降,若一个数字中恰好存在两个这样的状态就计算这个数字的所有位数和。给出一个区间,求出最大的和。(每一个峰不予许出现前导0)思路: 数位DP一般给出一个范围,从0到某一个数字,而这个题不行,因为数字有限制,有左区间。所以要做的就是枚举范围内的每一数字的状态,当然直接暴力是不可能的,而数字不超过30位,所以枚举数字,而限制可以通过上下界来确定原创 2017-08-16 22:46:56 · 446 阅读 · 0 评论 -
HDU 5067 状态压缩DP + TSP
状态压缩DP + TSP题意: 有n∗mn*m 的地图,地图上有一些石头,现在需要用最短的时间去到达这些石头,单位距离所花费的时间为1.思路: 单单去看原题是具有迷惑性质的,讲了很多乱七八糟的,所以在看题的时候需要抽象化问题,这道题因为清理石头不花费时间,而费时间的是如何到达所有石头才最快,也就是距离最短,经典的TSP问题,而石头的位置不超过10个,所以可以把石头的状态压缩在数字中,st原创 2017-08-20 20:07:42 · 280 阅读 · 0 评论 -
HDU 3092 分组背包
分组背包题意: 有一个数字n,现在要把它分解成几个数字相加!然后这几个数字有最小公倍数,题目目的是求出最大的最小公倍数。我们知道所有的素数或者其指数方相加可以表示其它的数字,而把n分解之后求其公倍数自然是互质的数字直接相乘最大,所以目的就变成了求n能分解之后由素数或者其指数数,只要他们之间相互互质就行。思路: 我们已经知道了要求出相互互质的数最小公倍数,怎么求呢? 首先素数相互互原创 2017-07-26 17:41:32 · 645 阅读 · 0 评论 -
HDU 4489 (DP递推计数)
DP 递推计数题意: 这是一道比较神奇的题,很考验思维:有n个高低不同的人,现在需要进行排列,排列一定要满足两种方式 高低高··· 低高低··· 求出有多少排列方式。 思路: 我们的切入点是第i个人,如果前i-1个人都已经排列好了,那么第i个人只需插入就行,因为任何人排列先后顺序不影响总的结果,我们就认为插入的人高度递增的,那么第i个人的高度是最高的原创 2017-07-22 11:08:30 · 497 阅读 · 0 评论 -
HDU 2844 (多重背包)
多重背包(二进制优化)模板题意: 有n个硬币,每一个硬币有自己的数值Vi,其个数为Ci。不同硬币的不同组合能买到不同物品,问在1~V的区间内最多能买到多少不同种类的物品。思路: 其实题意也就是求硬币在[1,V][1 , V ] 区间能组合成多少不同数字。那么问题来了,怎么求出? 直接暴力求那是绝对不能做的,现在的比赛怎么存在这么简单的问题。 可以把它转化为背包问题,dp原创 2017-07-22 16:48:32 · 331 阅读 · 0 评论 -
HDU 2159 (限制完全背包)
完全背包题意: 最近xhd正在玩一款叫做FATE的游戏,为了得到极品装备,xhd在不停的杀怪做任务。久而久之xhd开始对杀怪产生的厌恶感,但又不得不通过杀怪来升完这最后一级。现在的问题是,xhd升掉最后一级还需n的经验值,xhd还留有m的忍耐度,每杀一个怪xhd会得到相应的经验,并减掉相应的忍耐度。当忍耐度降到0或者0以下时,xhd就不会玩这游戏。xhd还说了他最多只杀s只怪。请问他能升掉这最后原创 2017-07-22 18:59:03 · 332 阅读 · 0 评论 -
HDU 4126 树形DP + prim
树形DP + prim题意:给出一个连通的双向图,每一条边都有权值,现在有q次询问,每次都会更改一条边的cost,问q询问更改之后的平均最小生成树是多少。注意更改的变的cost比原来大。所有询问互不干扰思路:直接的做法是每次更改之后求出最小生成树,然后相加所有询问情况输出平均值就行,但是q的范围比较大而prim的算法复杂度为n2n^2 ,所以会超时。考虑一下当更改了一条边会发生什么。改的边原创 2017-08-07 17:43:03 · 332 阅读 · 0 评论 -
HDU 4756 树形DP + prim
树形DP + prim题意: 有n个寝室,现在准备安装空调,但是线路比较老化,需要安装新的线路,每米的线路花费为m,给出n个寝的坐标,求出需要的最小花费,但是现在有一个问题,就是求出的最短的路径和其中有一条是不可以用的,但是也不知道是哪一条,但是与第一个寝室相连的路径可以用,为了确保安装进行至少需要多少钱?:思路: 转化一下问题,求出最小生成树之后,除了与第一个节点相连接的路径,其它都有原创 2017-08-07 23:14:34 · 333 阅读 · 0 评论 -
HDU 6121 满k叉树 + 思维
满k叉树 + 思维题意: 给出n个节点,按照 公式给的方式建树,每一个节点儿子节点的个数加上自己本身就是它的size,求出n个节点的size的^值。思路: 首先需要知道这个树是什么样子的,通过在本子上画图很容易发现这就是一个k叉树。对于一个满的k叉树,其所有size的异或值就是size本身通过这个性质发现,难点是在于怎么找到所有的子满k叉树,问题变成找到不满的k叉树的子树,然后知道其原创 2017-08-16 21:53:24 · 554 阅读 · 0 评论 -
HDU 2089 数位DP + 特殊数字的限制
数位DP + 特殊数字的限制题意: 杭州人称那些傻乎乎粘嗒嗒的人为62(音:laoer)。 杭州交通管理局经常会扩充一些的士车牌照,新近出来一个好消息,以后上牌照,不再含有不吉利的数字了,这样一来,就可以消除个别的士司机和乘客的心理障碍,更安全地服务大众。 不吉利的数字为所有含有4或62的号码。例如: 62315 73418 88914 都属于不吉利号码。但是,61152虽然含原创 2017-08-09 18:38:08 · 281 阅读 · 0 评论 -
HDU 2476 区间DP--转移思考方向
区间DP–转移思考方向题意: 有两个字符串,现在有一个操作可以把第一个字字符串的某区间改成同一个字母,问最少多少步可以变成第二个字符串。思路: 思考问题的方向,关键点在于有的区间端点相同的话可以直接一步操作,问题是很难直接用区间DP去比较两个字符串,四维的不行。换一种思考方式,如果能先把最坏的情况算出来,也就是直接构造一个字符串2的最少步数算出,就可以再找出特殊情况,所以对s2DP,从后往原创 2017-08-03 22:27:53 · 286 阅读 · 0 评论 -
HDU 6143 排列组合 - DP
排列组合 - DP题意: 给出m字母,现在要求用m个字母去取名字,firstname 和 lastname 不能同时存在相同字母,问:会有多少种组合数,对于firstname 和 lastname 必须保证长度为n。 数据量0<n,m<2000 0 < n,m < 2000题意: 最开始最开始用的DP去推出所有的解,复杂度达到了n3n^3 ,平常对复杂度的不重视导致比赛时候频频犯原创 2017-08-17 23:58:57 · 423 阅读 · 0 评论 -
HDU Advanced Fruits
Longest Common Subsequence : LCSdfs 回溯找到公共子序列的位置题意: 给出两个水果的名字,现在进行转基因造了一个新的品种,请你给它命名,命名方式是按照原来两个字符串中字母出现的位置,如果某一个字母两个字符串都有,就只需记录一次,尽可能的是字符串短。思路: 很明显是为了找出最长的公共子序列,这个很简单就能找得到,但是即使找到了怎么输出呢?dp[i][j]dp原创 2017-07-29 11:03:48 · 327 阅读 · 0 评论 -
HDU 4714 树的切割拼装成环
树的切割拼装成环题意: 有一棵树,现在想把它组装成环,问最少的步数是多少?思路: 如果想成为环,那么首先思考当一个节点的直接连接的儿子数量大于1的时候就要把它儿子分开了,比如 1节点有四个直接相连的儿子那么,若其想度为2的话只能有两个线存在,统一选择把与父亲节点相连的分开,cost = 1,然后把儿子节点大于2个的都分开,cost = 2,但是儿子分开之后还是要连起来的,与父亲原创 2017-08-06 23:30:03 · 343 阅读 · 0 评论 -
HDU 4616 树形DP + 限制求最大贡献值的路
树形DP + 限制求最大贡献值的路题意: 有一棵树节点为0~n,每一个节点都有一个值,但是有的节点会有陷阱,现在让从任意一个点出发能获得的最大值和是多少,限制为1. 不能进入陷阱的次数超过k次,当等于k 的是很好立刻停止,2. 每一个节点最多走一次。思路: 题意很明显是找到一条最大的一条路,并且最多进入k次陷阱,可以看成一点从两个儿子的走路中的最大值,这样可以暴力,但是超时了。原创 2017-08-07 11:19:40 · 317 阅读 · 0 评论 -
HDU 4055 计数dp + 排列组合
计数dp + 排列组合题意: 有一列数字,当第i数字比前一个数字大的时候就可以生成一个字符I,否则就是D,现在给出字符串,求出数列有多少种排列方式,注意字符串?代表比前一个数字大小都可以。思路: 此类题可以从当前第i数字是哪一个考虑。 定义:dp[i][j]dp[i][j] 表示第i个数字是j的组合数。那么当第i个字符串是‘I’,dp[i][j]=sum(dp[i−1][1]+..原创 2017-09-22 15:21:10 · 352 阅读 · 0 评论 -
V - Digital Deletions HDU-1404
V - Digital Deletions HDU-1404题意: 给出一个不超过6位的数字(有可能会出现前导零),有两种操作:1. 更改某一位的数字比其原来的小2. 如果某一位是0可以将其和之后的数字删除例如:两个人在玩游戏,谁先操作到最后谁获胜。思路: 此题可以sg打表,利用最简单的性质:同样逆推局面推出胜态。用相反的操作,还原胜态。#include <iostream>#in原创 2017-10-19 11:12:15 · 281 阅读 · 0 评论 -
I - Ugly Problem HDU-5920
I - Ugly ProblemHDU - 5920 题意: 有一个大数,长度不超过1000,现在需要分解它,并且分解出来的数字都是回文数字,求出每一个分解 的个数和每一个分解的的数字。要求个数不能超过50.题意: 此类题需要思维发散,向回文串的思路走的话会想到先找出一半,然后复制另一半,得到的数字必然是回文串,并且尽可能的大,当然会遇到此回文串比原串 大,即应该将左边的一半减一再还原,原创 2017-10-16 21:46:50 · 267 阅读 · 0 评论 -
HDU 5459 根据题意找规律
HDU 5459 根据题意找规律题意: 求一个字符串所有c字符位置到其它位置所需的步数和。思路: 就根据题目的意思,如果要求出下一项则需要前两项的和加上前两项移动需要的步数,此时如果能从这里想的话就很简单了。#include <iostream>#include <cstdio>#include <cstring>using namespace std;typedef long lo原创 2017-12-08 19:52:59 · 329 阅读 · 0 评论 -
HDU 5437by cyl优先队列
HDU 5437题意: 有个人要过生日,有k个朋友来拜访,但是他家里实在是有点小,只能依次让朋友进门,有m个特定的时间,每次可以进入p个人,每一个朋友来会带礼物,价值为v。主人还是比较贪心的,他让朋友进入的条件是谁的礼物价值大谁先进,价值相等就按照拜访的顺序进入。思路: 可以看出是细节题,考察了对优先队列的掌握,问题在于要猜测出题人的思路,或者说是算法不错但是无法AC的时候,多思考是不是原创 2017-11-30 21:44:50 · 288 阅读 · 0 评论 -
HDU 5438拓扑+bfs或者dfs
HDU 5438题意: 有个人有p个池塘,每一个池塘有其价值,池塘之间有连接的管道,现在主人由于资金的问题,需要抛弃一些池塘,其特点是与之相邻的池塘只有一个,当然如果删除了一个池塘之后剩下的池塘仍然有类似的池塘还要接着删除。 删除之后,问连通图中池塘的个数为奇数个的连通图所有池塘的价值和。思路: 记录每一个池塘所连接的边,其实也就是入度,此题的边是双向的,所以直接记录即可。原创 2017-11-30 21:48:33 · 288 阅读 · 0 评论 -
HDU 5441并查集 by cyl
HDU 5441题意: 杰克喜欢旅游,从城市a到城市b是他最喜欢的,现在有n个城市m个路。 当杰克在从城市a到城市b 的时候需要坐车,但是需要有等待时间t,他无法忍受超过x 的等待时间。 问:给出不同的x的忍耐时间,最多有多少a->b的方式,a->b和b->a当做两种不同的方式。思路: 由于x值有很多个,不能每次查找的时候都要新建立一个图,为了利用上一步的运算,不妨对询问先从原创 2017-11-30 21:50:45 · 338 阅读 · 0 评论 -
HDU5442 最小(大)表示法
最小(大)表示法 一个字符串扩增到两倍的时候,在0~n-1的范围中都可以通过循环找到与原字符串同构的字符串,但是其中有两个特殊的字符串,字典序最大和字典序最小(数字也可以当做字典序来处理),直接暴力找到最小或者最大的算法复杂度是O(n^2) ,有一种最小(大)表示法可以解决此问题。百度论文:https://wenku.baidu.com/view/c6c5e7335a8102d276a22fa原创 2017-12-02 10:12:43 · 319 阅读 · 0 评论 -
HDU 3374
HDU 3374题意: 字符串长度为n(n<=1000000),问从哪个位置循环是最大字符串,从哪一个字符串循环时最小字符串,如果存在多个输出最大、最小的位置以及有多少个。思路: 利用kmp算出有多少个循环,便是多少个。 利用最大和最小表示法求出位置,注意输出最小的位置。#include <iostream>#include <cstring>#include <cstdio>原创 2017-12-03 20:29:27 · 424 阅读 · 0 评论 -
HDU 6205 贪心
贪心题意: 题意:给你若干堆牌,所有牌默认向下,每次从第一堆开始,将固定个数的牌翻上,然后下一堆继续,直到没有足够的牌翻上,然后你可以获得当前操作过的堆的所有牌。一开始你可以调整堆的顺序,把第一堆放到最后一堆,你可以重复这个操作,问你要重复多少次这个操作,才能获得最多的牌。思路: 拿牌的开始一定是a[i]>b[i]a[i] > b[i] ,那么就从这里开始拿,每次拿都会计算出一个结果,那原创 2017-09-11 21:49:10 · 281 阅读 · 0 评论 -
HDU 2188 博弈 + sg打表
博弈 + sg打表只要当前状态可以转移到的状态中有一个是败态,那么当前状态就是胜态。如果当前状态可以转移到的所有状态都是胜态,那么当前状态就是败态。题意: 两个人玩加法游戏,谁先加到>= n,谁胜利,每次每一个人只能加1~m区间的数字。 利用第二条性质,可以直接打出表。博弈真是一个妖怪!换了一道题,我竟然还用原来的方法,看来未得真谛,所以要多多思考,当前局面和必败局和必胜局的关系。原创 2017-08-31 10:33:51 · 282 阅读 · 0 评论 -
HDU 4352 数位DP + LIS
数位DP + LIS题意: 每一个数字都有最长上升子序列,给出一个范围,求出里面的最长上升子序列为k 的数字个数。思路: 数位DP枚举的是每一个数位上的所有情况,当枚举到一个数字的时候其最长上升子序列可以压缩在一个二进制中,而二进制1出现的次数就是最长上升子序列的长度,其思想和LIS 的思想抑制。定义:dp[i][s][k]dp[i][s][k] 表示从最高位到第i位数字组成的数字最长上原创 2017-08-14 22:22:31 · 269 阅读 · 0 评论 -
HDU 6178 深搜。。。
深搜。。。题意: 有一棵有n个节点的树,现在要去掉多余的边,但是要保证k个特殊节点至少两两连接,问最后可以剩下多少条边。思路: 为了保证特殊的节点,最完美的状态时k条边都两两连接,那么会使用k/2条边,(奇数的情况需要加1)。当然如果树中没有那么多的两两连接的边,就会要多用一些边,也就是剩下多少特殊边就要用多少边。所以问题就是找到这样的两两边有多少。为了找出最多的两两边,要从儿子回溯,很原创 2017-08-25 19:52:49 · 417 阅读 · 0 评论 -
HDU 6156 数位DP
数位DP题意: 一个10进制数字可能是一个回文串,类似的在其它进制下也可能出现回文数字,给出一个区间,问在k1进制到k2进制下有多少回文数字。思路: 数位dp在计算的时候会考虑上下界的问题,会把问题转化为求出0到某一个区间的问题,然后按照数位进行递归求解,难点在于如何限制条件使得所问等于所求。这里用到了一个数组a,保存的是回文数字的每一位,然后在每一位是否取i值的时候直接判断即可。注意原创 2017-08-23 09:01:15 · 347 阅读 · 0 评论 -
HDU 6170 递推 DP,思考状态的递进
递推 DP,思考状态的递进题意: 给出一个原串和一个需要匹配的串,当然匹配串有两种操作。‘.’ 可以变成任何字母 ∗* 可以使得前一个字母变成任何长度>= 0,例如: a∗,可以变成“aa”,“aaa”甚至把a消失“”a*,可以变成“aa”,“aaa”甚至把a消失“ ”问是否能从匹配串变成原串。题意: 当前串能不能匹配需要知道之前一个串状态,很明显的dp问题,为什么我当时没有想出来原创 2017-08-23 10:41:57 · 321 阅读 · 0 评论 -
HDU 6121 K叉树的异或值和
K叉树的异或值和题意: 给出n个节点,节点按照(i−1)/2(i-1)/2 为i的父亲进行建树。问这棵树每一个节点的size异或值的和是多少。思路: 画完图发现这就是一个k叉树,对于k叉树有两个性质: http://blog.csdn.net/jaihk662/article/details/77203877#reply 性质:对于一颗满k叉树而言,如果k是偶数,那么它的异原创 2017-08-23 14:25:42 · 339 阅读 · 0 评论 -
HDU 6161 树形DP + 优化
树形DP + 优化题意: 有n个节点标号1~n,根据其公式建树,每个节点有权值最开始就是标号本身,有两种操作,分别是:修改u节点的值为v问经过u节点的路径中最大的权值和是多少思路: 对于经过一个节点的路径的权值和来说最大的情况有两种:1. 经过这个节点的父亲加上经过这个节点的某一个儿子的路径 2. 经过这个节点的两个儿子 不妨设dp[i]dp[i] 表示经过节点的儿子路径的权原创 2017-08-23 20:28:42 · 613 阅读 · 0 评论