自定义博客皮肤VIP专享

*博客头图:

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

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

博客底图:

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

栏目图:

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

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

-+

GODSPEED

这世界从来就只有强者的奋斗史,而没有弱者的墓志铭

  • 博客(26)
  • 资源 (1)
  • 收藏
  • 关注

原创 HDU 5402 Travelling Salesman Problem(组合数学+构造)

题意:给出一个n*m的棋盘,每个格子有一个非负权值,要求从左上角出发到达右下角,不能重复经过格子,要求权值最大并给出路径。思路:因为格子的权值非负,我们肯定希望经过尽可能多的格子,首先发现如果行或列有一个为奇数那么就可以遍历所有格子。现在的问题转化成为求出行列为偶数情况下的方案,假设棋盘由黑白格子交错组成,起点和终点为黑色,由棋盘染色问题可知这条路径上黑色格子肯定要比白色格子多一个,所以我

2015-11-18 22:26:20 417

原创 HDU 5385 The path(贪心+构造)

题意:给出一个有向有环图,第i个点距离1号点的最短路距离记为d(i),要求给每条边赋值, 使得 d(1)d(x+1)>.....d(n)。思路:贪心。对于一个图,如果我们知道每个点的d值,那么我们可以根据d值来给边赋值。现在的问题是求每个点的d值,可以默认每个点的d是1到n-1不等,用一个集合保存当前可到达的点的集合,然后用两个指针从左和右向中间扫,给每个点赋一个d值,然后遍历所有边给边赋

2015-11-18 00:10:31 439

原创 Codeforces Round #331 D. Wilbur and Trees(概率dp+区间dp)

题意:在一条直线上有n棵树,每棵树的高度都为h,每次等概率的砍掉最左边或最右边的树,一棵树如果被砍掉有p的概率向左倒下,有1-p的概率向右倒下,如果两树之间距离小于h,那么一颗树倒下后可以击中另一棵树使这棵树也倒下,现在给出n棵树的坐标和高度h,问所有树倒下后覆盖面积的期望。思路:这道题显然是概率dp,但状态有点不好表示。可以用状态dp[i][j][a][b](a=0,1;b=0,1)表示

2015-11-17 13:08:22 494

原创 HDU 5372 Segment Game(树状数组)

题意:每次插入一个线段,或删除一个已存在的线段,每次插入后输出当前插入的线段能完整覆盖存在的几条线段。思路:一个线段被另一个线段只需要它的两个端点都在另一个线段之间即可。用两个树状数组分别记录线段左右端点的位置,因为是按线段长度顺序插入的,所以只可能有以下五种情况所以对于当前查询的区间[l, r]答案就是左端点在l之后的线段减去右端点在r之后的线段之差。#include#

2015-11-15 20:19:00 401

原创 HDU 5378 Leader in Tree Land(树形背包+组合数学)

题意:把1到n划分到n个结点的树中,子树的领导是这个子树中权值最大的点。求n个结点的树中,领导为k个的情况数。思路:树形背包。用dp[i][j]表示以i为根的子树中领导为j个的情况数。首先用siz[i]表示以i为根的子树中有多少结点。考虑以i为根的子树,初始化dp[i][0] = siz[i] - 1,dp[i][1] = 1。这是只考虑i节点的情况。假设当前正在考虑以v为根的子树

2015-11-15 17:42:03 508

原创 HDU 5073 Coprime(容斥原理+组合数学)

题意:给出n个数,求出这些数中有多少个三元组(a,b,c),使得(a,b)= 1,(a,c) = 1,(b,c) = 1或(a,b) != 1,(a,c) != 1,(b,c) != 1。思路:这道题直接求答案并不好求,可以转化为先求不符合条件的三元组然后用总数减去这个不合法的组合数。把每一个数考虑成一个点,如果两个数之间互素那么连一条红边,如果不互素连一条黑边,那么问题转化成

2015-11-15 17:01:40 530

原创 HDU 5113 Black And White(搜索+剪枝)

题目大意:给你N*M的棋盘,K种颜色,每种颜色有c[i]个(sigma(c[i]) = N*M),现在给棋盘染色,使得相邻的两个棋盘染成不同的颜色,并且把所有颜色用完。思路:直接深搜,注意可以剪枝优化,当有一种颜色剩余数大于剩余格子数量的二分之一时肯定不合法。

2015-11-14 01:14:40 440

原创 HDU 5115 Dire Wolf(区间DP)

题意:有n只狼,每只狼有两种属性,一种攻击力一种附加值,我们没杀一只狼,那么我们受到的伤害值为这只狼的攻击值与它旁边的两只狼的附加值的和,求把所有狼都杀光受到的最小的伤害值。思路:区间DP。用dp[i][j]表示杀死区间[i, j]的狼所需要的最小花费,注意到区间[i, j]的两个边界永远是i-1和j+1,这是由状态转移方程决定的,状态转移方程为dp[i][j] = min(dp[i][k

2015-11-13 22:15:24 323

原创 HDU 5304 Eastest Magical Day Seep Group's Summer(状压DP+环缩点+生成树计数)

题意:给出一个图m条边和n个顶点,要求删除m-n条边使得原图联通,问有多少种方法。思路:显然删除后的图是由一棵树和额外的一条边组成的,如果只有树那么可以用MATRIX-TREE定理求出生成树的数量,但是现在多了一条边。考虑多了的这条边,这条边使得树上形成了一条环,那么我们只需要将这个环缩成一个点然后用生成树计数就可以解决了。注意到,这道题对于经过点相同的环是等价的,考虑用状压dp来求出

2015-11-11 19:41:17 542

原创 HDU 4305 Lightning(判断点在线段上+生成树计数)

题意:平面上有N思路:首先建图,判断任意两点间有无其他点,没有的话连一条边,剩下的就是统计生成树的数量。#include#include#include#include#include#include#include#include#include#include#include#include#include#include#define eps 1e

2015-11-10 17:54:08 465

原创 HDU 4328 Cut the cake(最大子矩阵+悬线法)

题意:给定一个n*m的棋盘有红黑两色,让截取一个周长最大矩形,该矩形要么全是黑色,要么全是红色,要么黑色和红色交替。思路:UVALive 3029 的强化版,多了一种01交替的情况,方法也很简单,把(i+j)为奇数的格子颜色翻转然后再求两次即可。#include#include#include#include#include#include#include#inclu

2015-11-09 19:00:56 553

原创 UVALive 3695 Distant Galaxy(枚举)

题意:给出平面上的n个点,找出一个矩形,使得边界上包含尽量多的点。思路:直接离散化暴力的话复杂度是O(n^4),考虑离散化后原图形就变成了一个矩形,其中有点的位置值为1,没有点的位置值为0。这就转化成了求子矩阵中边界上点最多的问题,先处理出每一列前j行的前缀和sumv[i][j],然后枚举任意两行,假设当前枚举的是第p行和第q行,第i列开口向右的u型上的点数为U[i],那么答案就是max(

2015-11-09 17:52:36 509

原创 UVALive 3029 City Game(最大子矩阵+悬线法)

题意:给定一个m*n的矩阵,0表示空地,1表示障碍,找出一个由空地组成的面积最大的子矩阵,输出最大面积乘以三。思路:直接枚举的话复杂度无法承受,考虑用扫描法。对于每一个点(i, j)可以由三个参数表示,up[i][j]表示这个方块所能向上延伸的最长高度,left[i][j]表示在这个高度下这个方块所能向左延伸的最远格子标号,right[i][j]同理。那么对于这个矩形中的所有子矩形一定能由某一

2015-11-09 15:15:25 579

原创 HDU 4127 Flood-it!(IDA*搜索)

题意:给n*n的方格,每个格子有一种颜色(0~5),每次可以选择一种颜色,使得和左上角相连(颜色相同以及相邻,间接也行)的所有的格子都为该颜色。求最少的步数,使得所有的方格颜色都相同。思路:搜索。直接bfs搜索肯定不行,状态太多会爆掉内存,考虑用IDA*搜索。直接在原图上搜索比较麻烦,所以我们考虑建一个新图,这也是这道题的关键,用1表示当前格子与(1,1)处于一个颜色的连通块中,2表示与之前那

2015-11-08 16:32:48 410

原创 埃及分数(迭代加深搜索)

题意: 古埃及,人们使用单位分数的和(形如1/a的, a是自然数)表示一切有理数。 如:2/3=1/2+1/6,但不允许2/3=1/3+1/3,因为加数中有相同的。 对于一个分数a/b,表示方法有很多种,但是哪种最好呢? 首先,加数少的比加数多的好,其次,加数个数相同的,最小的分数越大越 好。 如: 19/45=1/3 + 1/12 + 1/180 19/45=1/3 + 1/15 + 1

2015-11-08 12:12:28 637

原创 POJ 2449 Remmarguts' Date(第k短路+spfa+A*搜索)

题意:给出一个有向图,求出第k短路,节点可以重复经过。思路:首先在反向边上进行一次spfa求出任一点至终点的最短距离,将这个距离作为A*搜索的h函数,估价函数f = g + h。注意这题有一个坑点,当起点和终点位于同一位置的时候,没经过任何边不算做一条路径。#include#include#include#include#include#include#include#inc

2015-11-06 19:10:34 518

原创 HDU 4029 Distinct Sub-matrix(哈希+后缀数组)

题意:给出一个矩阵(n,m思路:首先容易想到对这个矩阵的每一个子矩阵进行哈希然后找出不重复的,但是这样做光是枚举所有矩阵复杂度就会达到O(n^4),更不用说空间复杂度无法承受了。考虑类似于求矩阵最大子矩阵和的方法,将原矩阵的每一列的任意子序列哈希,即用hash[i][j][k]表示原矩阵第i列从第j行到第k行的哈希值。有了这个以后我们可以枚举子矩阵的行数h,然后对于所有h行的子矩阵我们

2015-11-06 01:46:04 428

原创 Codeforces Round #329 D Happy Tree Party(树链剖分)

题意:给出一棵树,每条边有一个权值,每次可以进行两种操作,第一种计算操作给出一个数y和结点u,v,计算y除以从节点u到结点v之间所有数的商(向下取整),第二种操作是修改操作,将第i条边的权值修改为u。要求对于每一个询问输出结果。思路:因为y分别除以(下取整)一条链上的所有数等价于y除以(下取整)这条链上所有数的积,所以可以用树链剖分来做,只不过数据范围比较大,用一个状态标记当前区间

2015-11-05 16:09:29 807

原创 HDU 4005 The war(边双连通+缩点)

题意:有一幅图,现在要加一条边,加边之后要你删除一条边,使图不连通,费用为边的费用,要你求的是删除的边的最小值的最大值(每次都可以删除一条边,选最小的删除,这些最小中的最大就为答案)。思路:首先求出桥边然后缩点,这时候得到了一棵树,因为树上任意两点之间连一条线会形成一条环,所以我们就想使得环以外的最小边尽可能大。首先考虑最小边,最小边一定在这个环上,然后以这条最小边的两个端点进行dfs,找

2015-11-05 14:26:11 430

原创 HDU 5534 Partial Tree(完全背包)

题意:给一颗N个节点的树,f(i)表示度数为i的节点的点权,问这棵树最大点权。思路:每个点首先分配f(1),然后再从剩下的n-2中选出剩下的度,相当于一个完全背包问题。#include#include#include#include#include#include#include#include#include#include#include#include

2015-11-04 20:36:05 404

原创 ZOJ 3856 Goldbach(FFT)

题意:给出一个数n,问有多少种方法用最多用三个素数之间的加或乘能得到n。思路:fft。首先分类讨论,主要考虑三个素数相加有多少种方案,其余都比较简单。用fft处理出某一个数由两个素数相加得到有多少种方案,然后再枚举素数即可。#include#include#include#include#include#include#include#include#include#

2015-11-03 21:37:40 481

原创 UVALive 6669 Hidden Tree(状压DP)

题意:给一个序列a[],你从中选择一些子序列,将子序列的值从左往右依次放到某棵二叉树的叶子节点上,使得除了叶子,所有节点左右子树权和相等。子树的权和 = 子树叶子的权和。如果存在这样一棵二叉树,选择的子序列就是合法的。问,最长的合法子序列是多少。思路:考虑最后的合法子序列,其中的每一个元素肯定是base*2^k的形式,所以对于每一个奇数base我们分别求解然后求出最大值即可,那么也就是

2015-11-03 12:22:54 612

原创 HDU 5290 Bombing plan(树形DP)

题意给定n个点的树,每个点有一个点权wi, 每次选一个点u,则树上u和距离u wi范围内的所有点都会被染色。问:最少选几个点使得n个点都被染色。思路:树形DP。这道题无论是从思路还是实现都有点难度。首先用dp[i][j]表示以i为根的子树的点全被染色且可以从i点向上再染j个距离的最小值,用f[i]][j]表示以i为根的子树在距离i为j处的有子孙节点未被染色且距离超过j的子孙

2015-11-03 01:43:37 820 1

原创 HDU 5324 Boring Class(分治+树状数组)

题意: 定两个长度为n的数组,L,R,要求一个子序列(可以不连续)使的L递减,R递增。思路:这道题可以先把R数组离散化转化为二维坐标排序问题类似于HDU4742 这道题的不同之处在于要求出最后的这个序列下标并且要求字典序最小,所以要改变一下DP的含义,原来的dp[i]表示的含义是以i为结尾的lis,现在改为以i开头的最长下降子序列。这样在分治的时候,只需要先处理区间[M+1

2015-11-02 12:32:35 390

原创 HDU 4742 Pinball Game 3D (三维LIS+分治+树状数组)

题意:给出一些三维坐标可以任意调换顺序,求最长上升子序列。思路:如果二维的话排个序求lis即可但是三维的不能这样做了。如果朴素的DP那么时间复杂度为O(n^2)无法承受,考虑用分治的方法将时间复杂度降为O(n*logn*logn)。首先按照x坐标排序,然后x坐标就没用了(实际上这道题就是一个固定位置的二维lis)。然后对于当前的区间[L, R],先求出[L, M]的dp值,然后对y坐标排序

2015-11-02 01:52:26 702

原创 Codeforces Round #328 D Super M(树的直径+树形DP)

题意:给出一棵树,树上有n个点,现从中选出m个点,并可以从任意一个点出发,求出到达所有点的最短时间。思路:首先这些点中距离最远的两个点,然后对于这条链上的每个点u,用树形DP求出从u出发,经过子树中选中的的点并返回的最小时间,最后 加上走完直径的时间就是答案。#include#include#include#include#include#include#include#in

2015-11-01 14:38:24 489

百鸡问题详解

c语言实验题中的百鸡问题对理解c语言很有帮助多看无害

2014-04-11

空空如也

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

TA关注的人

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