自定义博客皮肤VIP专享

*博客头图:

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

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

博客底图:

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

栏目图:

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

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

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

原创 uva 1386

题目很恶心,读不懂,百度的题意。题目大意:一个细胞自动机,有n个格子,每个格子的取值为0~m-1。给定距离d,每次操作后每个格子的值将变为到它距离不超过d的所有格子在操作之前的值之和除以m的余数。普通的矩阵乘法会超时,然后就看到一个黑科技,循环矩阵循环矩阵乘法那里细节方面感觉还是有点不大清楚// Created by Chenhongwei on 2016-05-01 S

2016-05-01 20:27:04 297

原创 hdu 4596 (数论)

题目大意:给定若干组x,y,z,问是否能找到一个整数d,使得至少两组x,y,z满足y≤d%x≤z。解题思路:首先枚举出两组x,y,z。然后判断这两组是否能找到一个d,使得满足题目条件。现在假设a、b,有a*x1+y1≤d≤a*x1+z1和b*x2+y2≤d≤b*x2+z2;若两段区间有交集,必有a*x1+y1≤b*x2+z2且b*x2+y2≤a*x1+z

2016-05-01 12:54:05 394

原创 hdu 3011

/*我的做法是:设边长为r,CE=a,AG=x,正四面体的高为sqrt(6)/3 * r,体积可以求出为sqrt(2)/12 * r*r*r ,那么只要列个方程其中一个的体积等于总体积的一半就可以了,求ABEFHG这部分的体积为两个部分组成,上面一个小正四面体,和下面一个棱台,棱台体积用公式为1/3 *(s1+s2+sqrt(s1*s2))*h(棱台高),均可以用未知数表示出来,然

2016-04-15 01:00:25 397

原创 hdu 3010

dp[n]表示n乘以n棋盘中,一个对角线都不放的方案数,然后当新增一行一列时候,新增的那一列放到第i个位置那么那个放的总共有n-1种放法然后所放的那个位置关于对角线对称的那个点:有两种可能放还是不放如果对称点放那么就相当于dp[n-2],不放就相当于dp[n-1]// Created by Chenhongwei on 2016-04-15 Friday 00:08

2016-04-15 00:23:30 347

原创 lightoj 1017

dp[i][j]:处理到第i行,刷j次所能刷去的最多垃圾数求dp[i][j]时分两类(1)不刷第i行,最大是dp[i][j-1](2)刷第i行,贪心一下,让刷子的边缘是第i行,从第i行往前扫到第一个刷不到的行数i2,扫的过程中把扫走的垃圾数记为cnt,最大是cnt+dp[i2][j-1];dp[i][j]=max(dp[i][j-1],cnt+dp[i2][j-1])// C

2016-03-31 20:33:26 309

原创 poj 2486(树形dp)

树形dp,比较经典的一个树形dp。首先很容易就可以想到用dp[root][k]表示以root为根的子树中最多走k时所能获得的最多苹果数,接下去我们很习惯地会想到将k步在root的所有子结点中分配,也就是进行一次背包,就可以得出此时状态的最优解了,但是这里还有一个问题,那就是在进行背包的时候,对于某个孩子son走完之后是否回到根结点会对后面是否还能分配有影响,为了解决这个问题,我们只需要在状态中增加

2016-03-31 09:08:43 415

原创 hdu4565 矩阵构造+矩阵快速幂

第一眼看到就是矩阵快速幂,当然不能拿浮点数来快速幂了,要转化一下。

2016-03-03 00:16:35 306

原创 hdu 3555 数位dp

状态转移:  dp[i][0]代表长度为 i 并且不含有49的数字的个数;  dp[i][1]代表长度为 i 并且不含有49,但是最高位是9的数字的个数;  dp[i][2]代表长度为 i 并且含有49的数字的个数。  数组 a[i] 从低位到高位存储 n 的每一位数字。  则:dp[i][0] = dp[i-1][0] * a[i] - dp[i-1][1];  表示长度为

2015-12-03 21:59:46 267

原创 hdu4521 dp+树状数组

很容易想到是dp,类似于最长公共子序列n^2的求法,但是n^2的做法肯定会TLE的,就要想着优化。很容易想到线段树,其实树状数组也是可以做的。做dp的时候才用顺推的方法,逐步去更新。有一个坑点是d可能为0,然后就会TLE了,常见的处理方法,我们把所有的数都加一就好了。// Created by Chenhongwei in 2015.// Copyright (c) 2015 C

2015-11-26 17:42:51 274

原创 hdu 1421

状态Dp[i][j]为前i件物品选j对的最优解    当i=j*2时,只有一种选择即 Dp[i-2][j-1]+(w[i]-w[i-1])^2    当i>j*2时,Dp[i][j] = min(Dp[i-1][j],Dp[i-2][j-1]+(w[i]-w[i-1])^2) 以为要开long long,结果爆了内存;没想到排序,wa了好几次= =// Created b

2015-11-25 23:45:52 192

原创 hdu2512 Bell数

f[n][m]表示n张卡分成m组的种类数,那么f[n][m]=f[n-1][m-1]+f[n-1][m]*m,而ans[n]=sum{f[n][l]}(1    其中:f[n-1][m-1]代表第n个人自成一堆;     f[n-1][m]*m代表第n个人不自成一堆。// Created by Chenhongwei in 2015.// Copyright (c) 20

2015-11-24 23:12:11 217

原创 hdu4763 扩展kmp

题意是在一个字符串中找出一个前缀一个后缀和一个中间的子串,互相不重叠并且三部分完全一样运用的是exKMP对自身求一个next数组next[i]表示以i为开始位置的子串与整个串的前缀最长匹配到多少长度然后就是枚举了注意到我们枚举后三分一的位置时,如果某个位置为i,且next[i]+ i == len。也就是子串的长度为next[i]

2015-11-18 23:55:52 265

原创 hdu4333  扩展kmp

题意:给定一个数字相等的个数,大的个数分析:由于输入的数太大了,只能当作字符串处理,将输入的原串粘贴在后面,这样就可以对原串进行EKMP,最终只要统计从第i个位置开始的extend[i],如果>=len则从第i个位置开始的组成的数与原数相等,否则只要比较s[i]与s[i+next[i]]即可// Created by Chenhongwei in 20

2015-11-18 23:49:15 636

原创 uva11468

啥都不说了,直接上代码,debug到吐血// Created by Chenhongwei in 2015.// Copyright (c) 2015 Chenhongwei. All rights reserved.#include #include #include #include #include #include #include #include #inc

2015-11-13 00:00:13 285

原创 poj3630 简单Trie

突然想到一个很机智的做法,mark,插入的时候直接返回最后一个的sz,然后插入完之后判断一下就好啦、// Created by Chenhongwei in 2015.// Copyright (c) 2015 Chenhongwei. All rights reserved.#include #include #include #include #include #inc

2015-10-31 16:52:42 279

转载 Codeforces551C:GukiZ hates Boxes(二分+贪心)

题意:有n个地点,每个地点有a[i]个箱子,然后有m个人,每个人从第i个位置移动到第i+1的位置花费1S,每个人移动一个箱子花费1S,要求把所有箱子全部移除花费的最小时间是多少思路:先二分枚举答案,然后对每个答案判断是否能够满足即可// Created by Chenhongwei in 2015.// Copyright (c) 2015 Chenhongwei

2015-10-27 22:15:15 221

原创 CodeForces 407B Long Path ( DP )

题目大意:有n+1个房间。从1-n个房间。每个房间有两扇门。一扇去i+1的房间另一扇去编号为pi的房间。问到达n+1的房间至少要走多少次思路:如果我没看美辰巨巨的博客。我也以为会是模拟。结果是DP。那我猜想应该是把到达下一个房间所需要的步数 + 前一次到达当前房间的步数那么问题来了。DP数组应该怎么存放。参考美辰巨巨的办法。DP存放的是从当前位置到达下一位置

2015-10-26 23:31:29 358

原创 uva 10791 minimum sum lcm

1.将一个数分解成质因子,将相同的因子乘起来作为一个处理后的因子2.将处理后得到的多个因子直接相加就是答案3.因为题目说只要需要两个数字,所以对于1和素数我们需要小心。对于素数,我们只能分解出一个因子就它自己,对于1一个因子都分解不出来(我们不把1当做因子),他们的答案都是n+1,因为只有1和n的LCM是n // Created by Chenhongwei in 201

2015-09-09 18:38:09 195

原创 uva 12661 funning car racing

大意:在一个赛车比赛中,赛道有n个交叉点和m条单项道路,每条路都是周期性关闭的。每条路用5个整数u, v, a, b, t表示,表示起点是u,终点是v,通过时间是t,另外,这条路会打开a秒,然后关闭b秒,周期循环。当比赛开始时,这条道路刚刚打开。你的赛车必须在道路打开的时候进入该道路,并且这它关闭之前离开。现在求给定起点s到终点t的最短时间。思路:虽然路径的权值变成了动态变化的,但依旧符合

2015-09-09 18:30:38 356

原创 uva 10534 Wavio Sequence

题意:找一个最长(假设长度为2N-1)的子序列,使得前N个元素递增,后N个元素递减。和高中一道做过的题目几乎一模一样,noip的合唱队行,只不过这个要求递增和递减的数目相同。正着求一遍最长上升子序列,再逆着求一遍最长上升子序列,然后枚举每一个数,看起两边延伸的最短的长度乘2减一就好。由于数据很多,LIS要用nlogn的方法,很简单啦。// Created

2015-09-09 18:17:32 202

原创 uva 607 Scheduling Lectures

你在一所学校教书,每节课时长L,你有n个主题必须要讲完,每个主题时常为ti。有两个限制:1,每个主题只能在一节课内讲完,不能分开在多节课;2,必须按主题顺序讲,不能打乱。对于每节课,讲完主题的内容会剩下时间t,如果t>10,会产生不满意度(t-10)^2,如果 1问讲完所有主题,最少要用多少节课?如果有多种方案,要求不满意度最低。num[i]表示讲完第i个主题,所用的最少节课d

2015-09-09 18:13:13 234

原创 uva 247 calling circles

图的连通性问题。两个人相互连通当且仅当两人互相直接或者间接打过电话。因为间接通话的存在,无法直接用dfs来求连通块。要用Floyd算法实现的传递闭包来预处理两人是否直接或间接的通过话。Floyd算法完后则可以用dfs求出所有连通块了。// Created by Chenhongwei in 2015.// Copyright (c) 2015 Chenhongwe

2015-09-09 17:58:58 181

原创 uva 658 UVA 658 It's not a Bug, it's a Feature!

本题有两大难点,一是建图。其实无论邻接表还是邻接矩阵貌似建完整图的时间复杂度都比较大,而且好多状态未必用的到,因而不如干脆不建完整图,每次都扫描一遍转换规则,如果可以生成另一个状态就将另一个状态直接入队即可。状态可以用二进制表示。二是判断当前状态,用二进制来判断。  ①判定某些位置是否为1,如判定2、4位置为1,则转化为判断x|0101是否等于x。    ②判定某些位置是否

2015-09-09 17:55:31 213

原创 uva 1213 不同素数之和

题意:选择K个质数使它们的和为N,求总的方案数。分析:虽然知道推出来了转移方程, 但还是没把代码敲出来,可能基本功还是不够吧。d(i, j)表示i个素数的和为j的方案数,则 d(i, j) = sigma d(i-1, j-p[k]) ,其中p[k]表示第k个素数注意递推的顺序是倒着推的,否则会计算重复的情况。代码中第二重和第三重循环的顺序可互换。

2015-09-09 00:19:54 260

原创 uva 11526 H(n)

数据量这么大直接挨个来肯定是不行的。得想办法减少重复的计算。这样对于每个相等的n/i的i,只需要统计有多少个,而不需要挨个枚举。方法是,设n/i=u,这样i是得到u的最后一个,n/(u+1)+1是得到u的第一个,这样这段区间的和是区间长度*u。// Created by Chenhongwei in 2015.// Copyright (c) 2015 Chenhongwei. All

2015-09-09 00:15:41 208

原创 uva 12589 learning vector

题意分析:给出n个矢量,从中选择k个,以坐标原点为起点,收尾相连,问:这样的k个周围相连矢量与x轴围成图形的最大面积的两倍是多少?这里着重说一下为什么要对这些矢量按斜率进行排序:其次,对于选出来的矢量,我们一定按照斜率大的先放的策略进行放置。理由如下:对于任意选定的一组矢量收尾相加(这里的矢量都满足x>=0,y>=0),其最终最右端高度是一样的,其水平宽度是一样的。每一个矢

2015-09-09 00:11:18 339

原创 uva 1632 阿里巴巴

大意:直线上有n个点,其中第i个点的坐标为xi,且它会在di秒后消失。Alibaba可以从直线任意位置出发,求访问玩所有点的最短时间,无解输出No solution.思路:对所有点按照坐标从小到大排序,发现访问过的点一定是一个连续区间,用d[i][j][0]表示访问了区间(i, j),Alibaba在左端点,d[i][j][1]表示访问了区间(i, j),Alibaba在右端点。// C

2015-09-09 00:06:36 271

原创 uva 10163 storage keeper

有n个仓库(最多100个),m个管理员(最多30个),每个管理员有一个能力值P(接下来的一行有m个数,表示每个管理员的能力值)每个仓库只能由一个管理员看管,但是每个管理员可以看管k个仓库(但是这个仓库分配到的安全值只有p/k,k=0,1,...),每个月公司都要给看管员工资,雇用的管理员的工资即为他们的能力值p和,问,使每个仓库的安全值最高的前提下,使的工资总和最小。输出最大安全值,并

2015-09-08 23:58:35 279

原创 uva 10118 free candies

题目大意:有4堆糖果, 每堆糖果有n颗糖果,然后给出每颗糖果的类型1~20,然后只有取走当前堆的前面一颗糖果后才可以取后面的糖果, 然后小伙伴有一个篮子,篮子可以装5个糖果,如果篮子中的糖果存在相同类型的两个糖果,便可以将这两颗糖果算成一对放进腰包,问,小伙伴按什么样的方式取糖果可以取到最多的糖果。解题思路:记忆化搜索,开一个四维数组记录当前4堆糖果取走相应个数后能拿到的最多对糖果数。

2015-09-08 23:56:07 257

原创 uva 10285 最长的滑雪路径

题意  输入一个城市的滑雪地图  你可以从高的地方滑到伤下左右低的地方  求这个城市的最长滑雪线路长度   即在一个矩阵中找出最长递减连续序列令d[i][j]为以格子map(i,j)为起点的最长序列   则有状态转移方程d[i][j]=max{d[a][b]}+1  a,b为与i,j相邻且值比i,j小的所有点#include"cstdio"#include

2015-09-08 23:47:53 427

原创 uva 10003 cutting sticks

题目大意:将一段木棒按要求切割,每次切割都要付出与木棒长度相同的代价,求最小代价切割。感觉很水的一道题,简直是dp中的暴力状态表示:d[x][y]表示[x,y]区间上切割所用的最小值状态转移方程:d[x][y]=min{d[x][a[i]]+d[a[i]][y]+(y-x)// Created by Chenhongwei in 2015.// Copyright (c) 2

2015-09-08 23:35:26 247

原创 uva12186 Another Crisis

只是一道普通的树的dfs而已。关于求最少人数的式子:(k*T – 1)/100 + 1k*T/100不需要解释。一个-1一个+1则起到了手动ceiling的功能。因为整数除法是自动floor,所以+1就是将其变成ceiling。但如果整数除法得出的结果恰恰本身就是一个整数,那么+1将导致错误的结果。这时就需要在整数除法前,在被除数上减去一个比较小的正数(epsilon)(epsilon的大小和后面

2015-09-08 23:30:50 317

原创 uva 548 tree

这题就是运用了二叉树重建, 以及遍历。二叉树的遍历:先序遍历,中序遍历,后序遍历只要有一个中序序列再加上另一个序列就可唯一地重建原来二叉树。进行了二叉树重建之后,只要对这棵二叉树进行搜索, 取得各个路径之和,然后找出最小的那个和即可。// Created by Chenhongwei in 2015.// Copyright (c) 2015 Chenhongwei. All

2015-09-07 23:35:12 211

原创 uva 10410 树重建

题目大意:给定一个树的BFS和DFS,求这棵树。解题思路:用栈维护即可。对应BFS序列映射出了每个节点和根节点的距离,遍历dfs序列,对当前节点和栈顶节点比较,如果该节点距离根节点更远,则说明该节点为栈顶节点个孩子节点,则记录后将节点放入栈中。否则弹掉栈顶元素继续比较。需要注意一点,即当元素与栈顶元素的距离值大1的时候要视为相等,因为它们属于兄弟节点// Created by C

2015-09-07 23:31:50 524 2

原创 uva 10129 单词

这一题是典型的欧拉道路题目。  欧拉道路的定义是: 除了起点和终点外, 其他点的“进出” 次数应该相等。 换句话说,除了起点和终点外, 其他点的度数应该是偶数。对于有向图, 则必须其中一个点的出度恰好比入度大1, 另一个的入度比出度大。如果奇点数不存在的话, 则可以从任意点出发,最终一定会回到该点(成为欧拉回路)。题目给的单词量比较大,但是有用的只有首和

2015-09-07 23:23:34 331

原创 hdu 1503 Advanced fruits

解题思路:这道题就是给你两个单词,然后你要把两个单词拼接成一个新单词,使得新单词的子序列中包含两个单词,并且要使这个新单词最短。所以这道题就是求最长公共子序列,并且要记录下子序列的字母,以及他们在主串和副串中的原始位置,之后进行拼接输出。// Created by Chenhongwei in 2015.// Copyright (c) 2015 Chenhongwei. All

2015-09-07 23:16:43 207

原创 hdu1789 Doing homework again

分析:    简单贪心,一开始没想到思路。    很直观的,第一步按照score从大到小排序,如果score相等,则按照deadline从小到大排。    然后开始选择,让当前的课排在其deadline上面,如果这一天已经被占用了,那么就往前循环,有位置了就安排,没了就ans+=score。// Created by Chenhongwei in 2015.//

2015-09-07 23:12:45 207

原创 hdu 1058 humble number

题意:当一个数只有2、3、5、7这四种质因数时(也可以一种都没有或只有其中几种),这个数就是丑数,输出第 n 个丑数是多少;其实并没有发现hdu把这道题放在 dp 专题里的意图,我的思路就是预处理出丑数数组,然后读入 n 就直接输出第 n 个丑数。我自己又一种想法,询问翔神之后又学到了另一种做法。我自己的生成数组的方法是:数组的第一个元素定为1,然后用优先队列,首先将2,3,5,7放入优先

2015-09-07 23:02:01 248

原创 uva 442 矩阵链乘

// 题意:输入n个矩阵的维度和一些矩阵链乘表达式,输出乘法的次数。假定A和m*n的,B是n*p的,那么AB是m*p的,乘法次数为m*n*p  // 算法:用一个栈。遇到字母时入栈,右括号时出栈并计算,然后结果入栈。因为输入保证合法,括号无序入栈// Created by Chenhongwei in 2015.// Copyright (c) 2015 Chenhongwei. A

2015-09-07 22:38:31 269

原创 uva 140 宽带

给你一个以邻接表展现的图的节点以及其相邻的节点,这时你将所有出现过的节点随机排列,找出此排序中相邻节点之间距离最长的值代表此排列的值,而这只是其中一种排列,你要找出所有排列中这种代表的值得最小值,并将有最小值的串的排列情况输出// Created by Chenhongwei in 2015.// Copyright (c) 2015 Chenhongwei. All

2015-09-07 22:30:12 269

空空如也

空空如也

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

TA关注的人

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