自定义博客皮肤VIP专享

*博客头图:

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

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

博客底图:

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

栏目图:

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

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

-+

zyz_3_14159的博客

From 2016-9-20 厚积薄发

  • 博客(19)
  • 收藏
  • 关注

原创 LightOJ1119-Pimp My Ride-状态dp

题目大意:给你n份工作,在做第i份工作之前,如果之前做了第j份工作,就需要加上price[i][j],问你怎么排列工作才能使得花费最少;题目解析:很明显是状态dp,dp的时候枚举一下哪些做了就好了;AC代码:#include#include#include#include#include#define inf 0x3fffffffusing namespace std;l

2016-09-30 15:21:53 471

原创 POJ2836-Rectangular Covering-状态dp

题目大意:平面坐标上有n个点,你可以讲任意两点作为矩形的斜对角线上的两点,问你当所有点都被矩形覆盖之后,矩形总面积最少是多少;题目解析:这肯定是状态dp,但这里我们不能枚举点,我们应该枚举矩形,但矩形的形式是以点构成的集合,所以开始我们要处理出所有矩形的可能性,枚举第i个点和第j个点为边界构成的矩形时,应该再扫一遍点,把矩形包含的点也加进去;AC代码:#include#include#

2016-09-30 13:32:19 287

原创 LightOJ1037-Agent 47-状态压缩

题目大意:有一个杀手,他一开始有一把枪,每次开枪只能造成一点伤害,他需要消灭n个敌人,每个敌人有各自的health[i], 并且有武器,消灭敌人就可以获得他的武器用来消灭其他敌人;题目解析:n特别小,并且序列不需要有顺序,很明显是状态dp,dp[i]表示消灭序列i时所需要最少的开枪次数,然后dp的时候枚举没有消灭的敌人,选择消灭过的敌人们的武器与自己的作比较,这样肯定是最优解,然后dp就可以转

2016-09-28 23:04:54 232

原创 LightOJ1021-Painful Bases-状态压缩

题目大意:给你一段序列,并告诉你是几进制的,问你这段序列的全排列能够整除k的有几个;题目解析:状态dp中的序列肯定与顺序无关,但乍一看这道题目的序列是有顺序的,但仔细一想,我们只需要自定义它入序列的顺序就可以了,可以规定每次都在最高位加入,也可以规定每次都在最低位加入,这样很状态dp了,dp的时候也很简单,老套路枚举即可;//但我真的很想吐槽下LightOJ为什么__int64不可以一定要

2016-09-27 22:30:51 287

原创 HDU3001-Travelling-状态压缩

题目大意:给你一张图,有n个节点,有m条边,每条边都有它的权值,你的任务是访问每个顶点不超过两次,但每个点一定要被访问过一次,问你最少花费多少;题目解析:首先看到n这么小,肯定是状态压缩了,dp[i][j]表示以第i个点为结束点,j为状态序列的时候所表示的最少花费,注意这里的状态表示要用3进制,这样就能表示两次了,状态转移的时候只要枚举即可,初始条件只要初始每个点作为起始点即可;AC代码:

2016-09-26 23:14:55 235

原创 ZOJ3471-Most Powerful-状态压缩dp

题目大意:给你n个不相同的原子,第i个原子和第j个原子相撞会消耗掉第j个原子并且释放出pow[i][j]的能量,问你最多可以释放多少能量;题目解析:很明显这是一道状态压缩的题目,我们可以用dp[1AC代码:#include#include#include#include#includeusing namespace std;int main(){ int n,i,j,k,l

2016-09-26 15:47:08 211

原创 POJ2411-Mondriaan's Dream-状态dp

题目大意:给你一个n*m的图,你可以用1*2或者2*1的方块填充它,问你有多少种填充方案;题目解析:首先明确肯定是状态dp,我们可以定义dp[i][j]为第i行填充序列为j的方案总数,并且前i-1行都已经是完全填充;在状态转移的时候,我们判断1.第i行第j个元素是1,如果上面那个是1,那么这块方块必须是横着放的,那么j+1个元素也是1,并且第i-1行第j+1个元素也是1;2.第i行第j

2016-09-26 14:55:12 251

原创 POJ3254-Corn Fields-状态压缩

//首先这道题目真的是好题,但是POJ太坑了,给的n和m的范围偏小了,一直WA,很无奈。题目大意:给你一张n*m的草坪,每一块如果是1就表示可以放东西,0就不可以,你不可以在相邻的草上面放东西,问你最多能放几个;题目解析:开始dp肯定从这一行上面的草坪开始转移,肯定要状态压缩,否则肯定超时并且不能记忆化搜索,有个小技巧,如果一个排列有两个相邻的肯定不可以,所以我们先判断x&(1AC代码

2016-09-25 22:01:40 250

原创 ZOJ1655-Transport Goods-greedy,dijkstra

题目大意:一个王国正在受侵略,周边的城市要往它这里运送物资,给你n个点和m条路,题目比较拗口,每条路都有费用,问你最后到王国的最大总重量是多少;题目解析:首先构造成一个图,每个城市往王国运送物资肯定走费用最少的那条路,这就转化成了最长路问题,又是单源,我们就用dijkstra即可;AC代码:#include#include#include#include#include#in

2016-09-25 19:22:22 629

原创 ZOJ1161-Gone Fishing-greedy

题目大意:有一条单向的路,路上有n个鱼塘,可以钓鱼,每个鱼塘一开始可以钓到的鱼为fi,每次你在这个鱼塘钓完鱼的时候,这个鱼塘的fi就会减少di,问你要掉到最多的鱼的时候,在每个鱼塘所花的时间和最后钓到的鱼;题目解析:我们可以枚举每一个鱼塘,表示结束时候的鱼塘,然后钓鱼的次数就是你的总时间减去到达这个鱼塘所花的时间,每次钓鱼的时候,我们只需要找到当前能钓到最多鱼的那个鱼塘就可以了,还要把当前钓过

2016-09-25 14:14:35 495

原创 北京赛区(2016)网络赛A-The Book List-数据结构+DFS

题目大意:给你若干个字符串,每段字符串代表一本书,字符串中间会有'/'把各个字符串隔开成一段一段的,最后一个就是书,前面的都为目录,要求输出的时候按目录层层递进,如果两个目录都在同一个父目录之下,他们就按字典序排序,如果那个是书的话,就把书放在最后;题目解析:首先这肯定是个数据结构的题目,肯定是树,对于每棵树我们要保存它的子孙树,且需要保存它本身的字符串值,那么我们再输入每一本书的时候就需

2016-09-24 18:06:15 526

原创 ZOJ3541-The Last Puzzle 区间dp

题目大意:给你一段长为n的序列,你可以自定义起始位置,每当你按下第i个按钮,他会在t[i]后弹起来,且每个按钮之间都有距离,d[i]表示第i个按钮到1个按钮所需要花费的时间,题目问是否有一种方法可以使所有按钮都被按下,如果有就要输出按下去的顺序;题目解析:首先我们明确大方向,这应该是一个区间dp的题目,并且有题目可知dp的时候一定要考虑方向;其次如果给你一段序列,你要在最短的时间遍历它,肯定要

2016-09-24 00:28:01 527 1

原创 ZOJ3070-The Colored Stones - 状态压缩dp

题目大意:给你一段长为n的序列,每个石头都有一个颜色,一共有m中颜色,你可以每次拿走一块石头,最后这段序列没有一个颜色的石头会被另一个不同颜色的石头隔开,问你最少需要移走多少个石头;题目解析:最后的序列每种颜色的石头肯定都挤在一起,每次我们加一个石头的时候就需要考虑前面有没有这种颜色的石头,而不需要知道有多少个,所以我们就可以想到用状态压缩;dp[i][j][k]表示对第i块石头,颜色状态

2016-09-23 20:41:53 598

原创 ZOJ2845-The Best Travel Design

题目大意:给你一个无向图,一共有N个节点,你必须要经过给定的M个节点,输出最多游览的节点数;题目解析:如果考虑游览的过程,那么顺序显得十分复杂,不仅不容易记录而且十分耗时间,所以我们需要采用状态压缩法:int p[20];p[i]=2*(i-1),dp[s][j],s表示当前已经游览的节点数的集合(不需要考虑顺序),j表示当前在第j个节点上,很容易发现在dp转移的时候,我们必须要知道最短路径,

2016-09-22 17:16:44 297

原创 ZOJ1733-Common Subsequence

最长公共子序列,设dp[i][j]为X序列前i个元素和Y序列前j的元素所能构成的最长公共子序列;状态转移方程:{0i=j=0;dp[i][j]=    dp[i-1][j-1]+1 X[i]=Y[j];max(dp[i-1][j],dp[i][j-1])else }#include#include#include#include#include

2016-09-21 20:40:33 301

原创 ZOJ1227-Free Candies

题目大意:给你4堆长度为n的糖果,每种糖果有一种颜色([1,20]);和一个篮子,你每次可以在每堆最上面的那个糖果中取走一个放在篮子里,如果篮子里有相同的,就放到结果里面,如果篮子里的糖果颜色都不一样,并且已经有5个了,就失败,问你最多可以取走多少对糖果?题目解析:因为n才40,我们可以定义dp[41][41][41][41]表示每一堆取走多少个,这样时间复杂度为O(n^4),不会超时,可以暴

2016-09-20 21:34:42 463

原创 codeforce-628B-Cards

题目大意:给你3种颜色的卡片若干张,你有两种操作:1.挑选两张颜色一样的卡片变为一张那张颜色的卡片;2.挑选两张颜色不一样的卡片变为低三种颜色的卡片吗;问你最后会有什么情况;题目解析:不难发现每次操作之后卡片总数就减少一,为了记录各种卡片的个数,我们这里可以开一个三维dp[i][j][k];i表示取了第几次,因为最后肯定只剩1张卡片,而每次总数减少一,所以一共取了n-1次;j表

2016-09-20 12:00:55 347

原创 codeforces715A-Plus and Square Root

题目大意:给你你个特殊的计算器,刚开始的时候计算器屏幕上的数字是2,并且处于level1,我们可以有两种操作:1.按下“+”,那么屏幕上的数字会加上当前的level;2.按下“sqrt”,就是开方,但是level会加1,并且要满足开方后的数要整除(level+1);题目解析:这类题目肯定有很多解,我们只需要找到一个通式就好了,我试了一下,对于level =k而言,首先屏幕上的数

2016-09-20 11:42:06 290

原创 ZOJ1163-The Staircases

题目大意:给你n块积木,让你大成至少两排,且必须严格递减,问你有多少种解法;我们稍微转化一下,可以很简单的想到就是给你你个整数n,把n拆成若干个不相同的数,有几种解法;令 dp[i][j],i表示我们将要拆分的整数n,j表示最大的那个数不超过j,可以想到,当最大的那个就是j,那么dp[i][j]+=dp[i-j][j-1];当最大的那个小于j,dp[i][j]+=dp[i][j-1]...

2016-09-20 10:48:27 791

空空如也

空空如也

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

TA关注的人

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