自定义博客皮肤VIP专享

*博客头图:

格式为PNG、JPG,宽度*高度大于1920*100像素,不超过2MB,主视觉建议放在右侧,请参照线上博客头图

请上传大于1920*100像素的图片!

博客底图:

图片格式为PNG、JPG,不超过1MB,可上下左右平铺至整个背景

栏目图:

图片格式为PNG、JPG,图片宽度*高度为300*38像素,不超过0.5MB

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

-+
  • 博客(10)
  • 收藏
  • 关注

原创 kmp -- Count the string HDU - 3336

Count the string HDU - 3336题意:T次询问,每次给你一个数 n 和字符串 s ,n为s的长度。问你s的所有前缀要和s串匹配时要比较多少次。思路:next求出的就是和前缀匹配的最大长度,若长度大于0代表和前缀匹配,那么个数增加1,然后缩小前缀再进行判断。如 ababa 当我们匹配到a的时候,得到的next[5] = 3, 这时候次数增加1, 再匹配一下next[3] = 1,值也大于0那么次数还要增加, 再匹配next[1] = 0, 等于0了代表没有前缀和它相等

2020-11-27 17:01:00 81

原创 kmp 最小循环节

Cyclic Nacklace HDU - 3746题意:T次询问,每次询问给你一个字符串s(|s| <= 1e5 ),问你在串尾最少加几个字符可以使s至少包含两个循环节。思路:next数组求循环节,s的最小循环节长度 m = strlen(s) - nxt[strlen(s)]。显然,s中没有出现最小循环节,那最小循环节就是s串本身(nxt[strlen(s)] = 0),若有则可以把后面完整或部分的循环节通过减nxt[strlen(s)]去掉,保留第一个。code:

2020-11-26 11:50:00 210

原创 区间dp -- You Are the One HDU - 4283

You Are the One HDU - 4283题意:由T个测试样例,每个样例有n(1 <= n <= 100)个数d[i] (0 <= d[i] <= 100),如果的d[i]是第k个算贡献,则的d[i]的贡献是(k - 1)* d[i],先在给你一个栈,你可以任意时间把d[i]放入栈中或从栈中取出,以此来控制算贡献的顺序。求最小贡献。思路:f[i][j]表示把区间 [i, j] 翻转过来的贡献和,栈的作用就是把进栈的区间 [i, j]翻转顺序。dp[i][j]表

2020-11-18 22:52:12 80

原创 区间dp -- Food Delivery ZOJ - 3469

Food Delivery ZOJ - 3469题意:在一条笔直的街道上有有一个餐馆和 n 户居民,每户居民都会在餐馆订餐,餐馆的坐标为X,参观送餐的速度是1 / V,每户居民都有两个属性x、 b,分别表示自己在街道上的坐标、单位时间内对餐馆送餐速度焦虑值。请你规划一种送餐策略,求所有居民对餐馆最小的焦虑值。思路:每次出发有两种选择,要么向左走到第一个没被送餐的居民,或者向右走到第一个没被送餐的顾客。把餐馆两边的居民分为左右(l、r)两个部分,并按距离由近到远排好序。dp[l][r]

2020-11-18 18:05:29 96

原创 区间dp -- Multiplication Puzzle POJ - 1651

Multiplication Puzzle POJ - 1651 题意:给你 n(2 < n <= 100)个数,求把这n个数删到只剩首尾两个数的代价和,删掉一个数的代价是这个数和与它相邻的左右两个数的乘积。例如:如果有6个数10 、1、50 、20、 5,删数的顺序为 1、20、50,则代价和为:10 * 1 * 50 + 50 * 20 * 5 + 10 * 50 * 5 = 500 + 5000 + 2500 = 8000。如果删数的顺序为 50、20、1,则代价和为:1 *

2020-11-14 16:29:06 138

原创 数位dp(平方和问题) -- 吉哥系列故事——恨7不成妻 HDU - 4507

吉哥系列故事——恨7不成妻 HDU - 4507 题意:有T次询问,每次询问给两个数 l、r(1 <= l <= r <= 1e18),求在 l、r 间所有与7无关数的平方和。与7无关数定义: 如果一个整数符合下面3个条件之一,那么我们就说这个整数和7有关,都不符合则是与7无关数  1、整数中某一位是7;  2、整数的每一位加起来的和是7的整数倍;  3、这个整数是7的整数倍;思路:dp[pos][sum1][sum2],一维表示一个数从左至右第pos个数位,二维su

2020-11-10 22:01:26 115

原创 数位dp -- Balanced Numbers SPOJ - BALNUM

Balanced Numbers SPOJ - BALNUM 题意:有T次询问,每次询问给你两个数l、r(1 <= l <= r <= 1e19),问你l、r间有多少个平衡数。平衡数定义:0、2、4、6、8等偶数出现奇数次,1、3、5、7、9等奇数出现偶数次,0 ~ 9的中有的数也可以不出现,符合这样的条件称为平衡数。思路:dp[pos][sum],一维表示从左至右第pos数位,二维sum表示0 ~ 9出现情况的状态压缩。如何状压0 ~ 9的出现奇偶情况,用数位长度为10三进

2020-11-10 15:43:06 79

原创 数位dp入门 -- B-number HDU - 3652

B-number HDU - 3652题意:多次询问,每次询问给你一个数n(1 <= n <= 1e9),问你n内有多少个数含有‘13’且能被13整除。思路:dp[pos][sum][ind]。一维表示数从左至右的第pos位。二维sum表示前pos位前缀数模13的值。三维ind,ind = 0表示前pos位前缀数中没有出现’13’、且pos - 1位的数不为1,ind = 1表示前pos位前缀数中没有出现’13’、且pos - 1位的数为1,ind = 2表示前pos位前缀数中出现了

2020-11-09 01:33:41 100

原创 数位dp入门 -- Balanced Number HDU - 3709

Balanced Number HDU - 3709 题意:给你T次询问,每次去询问两个数l, r(0 <= l <= r <= 1e18),问你l,r间有多少个平衡数,平衡数定义:平衡的数字必须与某些数字的支点保持平衡。例如,4139是一个枢轴固定为3的平衡数。左侧部分和右侧部分的扭矩分别为4 * 2 + 1 * 1 = 9和9 * 1 = 9。思路:dp[pos][sum], 一维表示一个数从左到右第pos位,二维sum表示支点左右相加后的平衡值,支点左边的数设为正,右边

2020-11-09 00:24:31 116

原创 数位dp -- Beautiful numbers CodeForces - 55D

Beautiful numbers CodeForces - 55D题意:每次问你在[l, r]的区间类有多少美丽数,我们将定义美丽数是一个可以被自己每一位上非0的数整除。l, r的范围是9 * 1e18级。思路:数位dp思路一个的数由0 ~ 9组成,一个数可以同时被1 ~ 9中的若干数整除,等同于该数可以被它们的最小公倍数整除。dp[pos][sum][lcm],一维pos表示从高位到低位的第几个数,二维sum表示一个到前pos位的前缀数,三维lcm表示前pos位的每一位数的最小公

2020-11-06 21:18:17 83

空空如也

空空如也

TA创建的收藏夹 TA关注的收藏夹

TA关注的人

提示
确定要删除当前文章?
取消 删除