自定义博客皮肤VIP专享

*博客头图:

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

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

博客底图:

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

栏目图:

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

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

-+
  • 博客(28)
  • 资源 (1)
  • 收藏
  • 关注

原创 poj 2559 Largest Rectangle in a Histogram 求面积最大的矩形(单调栈)

Largest Rectangle in a Histogram题目大意给出一个数N代表有多少个矩形,然后下面有N个数代表每个矩形的高度,宽度均为1。最后求这N个矩形组成的最大面积!解题思路很容易想到的就是使用单调栈。维护一个从栈顶到栈低减小的栈! 每次遇到栈顶的元素大于要压入的元素就要,出栈然后和当前的最大面积取最大值,这样一直下去,最后栈中就剩下一个从栈顶到栈低减小的栈。最后变为的栈就像下面这

2016-08-31 00:05:03 3114

原创 hdu 3555 Bomb 经典数位DP

传送门:Bomb题目大意给定一个整数N,求1~N中连续49的个数解题思路dp[i][0]表示长度为i位,不包含49的个数 dp[i][1]表示长度为i位,第一位是9的个数 dp[i][2]表示长度为i位,包含49的个数AC代码#include <cstdio>#include <cstring>#include <algorithm>#include <queue>#include <m

2016-08-22 22:25:49 466

原创 hdu 2089 不要62 数位DP

传送门:不要62 中文题目不做过多的解释解题思路用dp[i][j]表示最高位是j的长度为i的有多少种满足要求的! 比如:dp[2][6] = 8;(60,61,63,65,66,67,68,69) 这里的情况是可以包含有前导0的,比如dp[3][0]表示从0开始长度为3的情况数目!这里就包括000~099这么多的情况!AC代码#include<cstdio>#include<cstring>

2016-08-20 21:27:04 471

原创 scu 4440 Rectangle

传送门:Rectangle题目大意给N*M的格子,求由多少种不超过周长为K的矩形解题思路枚举长为1~N的满足条件的情况, 然后找到宽度的最大值 求出高度有多少种可能性, 因为宽度的数量是一个等差数列,所以能通过等差数列的前n项和公式求AC代码#include<cstdio>typedef long long LL;int main(){ int N,M; LL K;

2016-08-18 19:05:40 578

原创 scu 4437 Carries 二分+简单思维

传送门:Carries题目大意第一行给出一个数N,然后下面的N个数, 判断任意两个数的进位之和。 例如h(35,82) = 1,h(1,99) = h(99,1) = 2;解题思路我们可以把低位向高位开始算,如果有进位那么就+1,最多就是9位数,就来依次枚举这九位数进行判断,对于每个得到的低位数我们先排序然后进行二分查找,更新答案;AC代码#include<cstdio>#include<al

2016-08-18 13:38:06 428

原创 scu 4438 Censor 字符串哈希+前缀和

传送门:Censor题目大意给定一个字符串A和一个字符串B,如果如果B中存在A字符串,就在B中把A字符串去掉,输出最后去掉A字符串之后B字符串解题思路这个题目用到了字符串哈希和前缀和的思想! 我们把输入的A字符串哈希为一个整数,然后把用一个数组hb[i]表示B字符串中前i个的哈希值,当i大于字符串A的长度的时候就判断i-lena,i这个区间的哈希值是不是等于A串的。AC代码#include<cst

2016-08-18 12:21:22 2047

原创 scu 4444 Travel 补图的最短路

传送门:Travel题目大意有N个点M条边 然后是M条a花费的边 其余的所有的边都是b花费,问1到N的最小值解题思路这个题目分为两种情况: 1. 从1和N之间相连的是花费为b,那么答案就是花费为a的M条边里面的最短路和b进行比较,取最小值,直接跑一边dijkstra就可以了 2. 从1到N之间相连的是a,那么答案就是N(N-1)/2条花费为b的边中的最短路和a进行比较取最小值,因为变得数量特

2016-08-18 00:05:03 1574 1

原创 poj 2955 Brackets 区间DP

传送门:poj 2955 Brackets题目大意判断给定的字符串满足条件的个数,(由’[‘,’]’,’(‘.’)’构成的序列)解题思路dp[i][j]表示i到j这个区间的最大匹配数目! 这个dp[i][j]有两个状态专一的过程, 1. 如果i位置和j位置的括号是匹配的那么,转移方程就变为了dp[i+1][j-1] 2. 然后我们将这个区间拆分为两个区间,然后我们从小到大枚举i到j这个区间,每

2016-08-16 23:00:18 331

原创 NUOJ 737 石子合并(一)区间DP

传送门: 中文题目好理解解题思路我们把这个问题分为若干个子问题!先求两个合并的最小代价,然后求三个的,一直求到n个。dp[i][j]表示合并i石头到j石头花费的最小代价 所以状态转移方程为: dp[i][j] = min(dp[i][j],dp[i][k],dp[k+1][j]); 我们就可以从小都大枚举石头的数量知道合并完所有的就可以了!AC代码#include<cstdio>#incl

2016-08-16 22:41:07 385

原创 hdu 5592 ZYB's Premutation 经典线段树

传送门:hdu 5592 ZYB’s Premutation 题目大意给出N个数,第i个表示前i个有多少个逆序数,求出原序列解题思路非常经典的线段树求关于逆序数类的题目! 如果某个位置没有使用过,我们就设这个位置为1,如果这个位置已经被使用过了就置为0。我们用线段树维护当前区间有多少个1。 A[i+1]-A[i]是相对于A[i]位置的新增的逆序数,x=A[i+1]-A[i]+1表示还没操作的中第

2016-08-16 19:06:14 352

原创 SGU 149 Computer Network 树状DP求单点到树的最大距离

传送门;Computer Network题目大意这个题目主要是输入理解了好长时间,不安正常的顺序出牌呀!! 第一行输入的是点的数量,下面的N-1行(从第二行开始),第一个数和第几行这个数相连,也就是和i相连。第二个数是权值!解题思路解题思路,这个和求树的直径是异曲同工的!第一个DFS中的dp[i][0]表示第i个节点到子树的最大距离,dp[i][1]表示第i个节点到子树的次长距离!然后第二个DFS

2016-08-16 12:55:20 559

原创 sgu 143 Long Live the Queen 树状DP

传送门:sgu 143 Long Live the Queen题目大意:给出一棵树找出这个子树价值的最大值解题思路简单的树状DP,判断当前节点的子树,如果这个子树大于0就加上,如果小于0就放弃!AC代码#include<cstdio>#include<cstring>#include<algorithm>using namespace std;const int MAXN = 16000 +

2016-08-15 21:18:08 444

原创 poj 1655 Balancing Act 树状DP,求树的质心

传送门:Balancing Act题目大意有N个节点的无根树,每两个节点之间只有一条边,求删除一个节点之后最大的联通块(节点数最多)!解题思路先任意选择一个节点作为根节点,这样就能把一颗无根树变为有根树了,然后设sum[i]表示已i节点为根节点的子树的节点个数。 那么删除节点i会有多少个联通块呢? i节点有多少孩子节点就有多少联通块还有i的父节点也是一个联通块! 如下图所示: 比如说E节

2016-08-13 23:43:34 487

原创 poj 2631 Roads in the North BFS/树状DP

传送门:poj 2631 Roads in the North题目大意输入边的两个顶点和权值,输出任意两个顶点的最远距离;解题思路这是一个裸的求树的直径的题目。 先说用BFS的方式,第一个BFS随便找一个顶点进行松弛,找到最远的一条路径并且记录下来那个顶点,因为这个距离肯定是包含在了最后的最长路径里面,所以在对刚才找到的那个节点进行一次BFS找到就是树的直径。AC代码#include<cstdio

2016-08-13 18:51:36 400

原创 FZU 2141 Sub-Bipartite Graph

传送门:FZU 2141 Sub-Bipartite Graph题目大意有N个节点有M个边,把这N个点分为两个集合,每个边的顶点都在两个集合之内(因为选出的是子图,所以一条边的两个顶点的都在一个集合也是可以的),但是边的数量要大于等于M/2 解题思路这个题目单纯的二分图染色的话,可能会忽略一些不满足的情况。 这个题目就是求分为两个集合,并且保留尽可能多的边。 下面就是怎么保留尽可能多的边呢?

2016-08-13 01:43:50 376

原创 poj 3259 Wormholes SPFA判断 负权值环

传送门:poj 329 Wormholes题目大意测试的第一行N,M,W N代表点的个数,M代表双向边的个数,W代表单向边的个数解题思路简单的SPFA判断有没有负环,如果某一个点进入的队列的次数大于了N就代表有负环!AC代码#include<cstdio>#include<cstring>#include<queue>using namespace std;const int MAXN =

2016-08-11 12:12:38 441

原创 CodeForces 493C C. Vasya and Basketball 二分

传送门:C. Vasya and Basketball题目大意第一只队伍有N的个人投篮,第二个人有M个人投篮,为了让第一只队伍和第二只队伍的分差尽可能大,怎么选定三分线解题思路对两只队伍的每个距离进行二分,判断最大分差,还有判断两只队伍都是投三分球和都是投二分球的进行判断AC代码#include<cstdio>#include<cstring>#include<algorithm>using

2016-08-11 11:41:28 392

原创 BNU 1642 简单的图论问题? 最短路+BFS

传送门:简单的图论问题? 中文题目不做过多的解释解题思路输出的第一个就是使用简单dijsktra就可以了,对于有趣的情况使用优先队列+BFS就可以,这两种情况分别处理AC代码#include<cstdio>#include<cstring>#include<queue>#include<cmath>using namespace std;const int MAXN = 505;con

2016-08-11 00:20:33 468

原创 hdu 5418 Victor and World 状态压缩+SPFA最短路

传送门:hdu 5418Victor and World题目大意给一个地图,从其中一个点开始走,遍历完所有的点后最后再回到这个点,求最短路径解题思路这个点数知识16所以很容易想到状态压缩! 我们用dp[i][j] 表示 状态为i的时候,结尾在j位置,状态转移方程为dp[S|(1<AC#include<cstdio>#include<cstring>#include<queue>#includ

2016-08-09 01:55:00 491

原创 Codeforces Round #360 (Div. 2) -- C. NP-Hard Problem (DFS二分图染色法)

传送门:Codeforces Round #360 (Div. 2) – C. NP-Hard Problem题目大意给你一个无向图,判断是否能够构成一个二分图,如果能的话,输出二分图左边的集合和右边的集合。解题思路比较简单的二分图对每一个没有染色的节点进行DFS染色,如果已经连接的节点已经染色了,如果相邻的节点已经染色,并且颜色是相同的就是不能构成二分图!AC代码#include<cstdio>

2016-08-06 22:36:34 506

原创 SGU 101. Domino 欧拉回路

题目大意给定你n张骨牌,每张牌左右两端有一个数字,每张牌的左右两端数字可以颠倒,找出一种摆放骨牌的顺序,使得相邻骨牌的两端数字相同(最左边骨牌的最左端和最右边骨牌的最右端可以不管)。解题思路这是个很普通无向图欧拉回路,但是要注意判断这个图是否在一个连通分量里面! 输出No solution的条件有两个 1. 如果不满足欧拉回路的性质就输出 2. 如果不在一个连通分量 对应于第一个就是判断每个

2016-08-06 16:32:17 330

原创 poj 2230 Watchcow 无向欧拉回路求路径

传送门:poj 2230 Watchcow题目大意从1开始每个节点访问两次,打印任一路径解题思路因为要求每个节点访问两次,这也就暗示了每个节点之间连通是双向的。所以建边的时候只要双向建立边就好了,也就是建立无向图。两个点之间也就是两条边,然后再用DFS一直找下去就好了!AC代码#include<cstdio>#include<cstring>const int MAXN = 50000*4+5;

2016-08-06 16:15:20 404

原创 hdu 2647 Reward 拓扑排序+向前星邻接表

传送门:hdu 2647 REward题目大意有个老板要给员工发工资,老板很善良想满足每个员工的要求 ,但是他很吝啬。解题思路先解释一下什么是向前星邻接表; 一般在一个图当中我们使用邻接矩阵表示连个点之间是否有边比如:E[i][v] = 1表示有边,如果等于0表示没有边,但是如果数据十分大的时候就会造成空间的浪费,而且内存也是不够的。那么我们就考虑使用邻接表了,(邻接表和邻接矩阵都是线性代数里面的

2016-08-06 02:14:29 560

原创 hdu 1054 Strategic Game 树状DP

传送门:hdu 1054 Strategic Game题目大意一城堡的所有的道路形成一个n个节点的树,如果在一个节点上放上一个士兵,那么和这个节点相连的边就会被看守住,问把所有边看守住最少需要放多少士兵。解题思路这是个典型的树形DP的题目! 1. 根—>叶:既根传递有用的信息给子节点,完后根得出最优解的过程。 2. 叶->根:既根的子节点传递有用的信息给根,完后根得出最优解的过程。这类的习题

2016-08-04 00:24:00 366

原创 hdu 1796 How many integers can you find 容斥原理

传送门:hdu 1796 How many integers can you find题目大意在M个集合中,找到能被N整除(不包含N)的个数解题思路首先要解决这个题目要知道什么容斥定理! 我们先假设N=100,然后M=3其中M集合中的元素为{1,2,3} 如果我们直接计算N/a1 = 100,N/a2=50,N/a3 = 33,在计算前两个的时候,N/a2这么多个元素就是多余的,在计算后面两个的

2016-08-03 10:48:41 435

原创 hdu 2068 RPG的错排 (错排公式)

传送门:hdu 2068 RPG的错排 中文题目,不做过多的解释解题思路这里用到了一个错排公式! 什么是错排公式: n个元素理应由n!个不同的排列。如果n个元素都在不原来的位置,我们叫这种排列方式为错排! 给定任意一个整数N,求出1,2,3….N的错排个数共有多少个。 递推关系式为:D(n)=(n-1)(D(n-1)+D(n-2)) 证明如下: n 个不同元素的一个错排可由下述两个步骤

2016-08-02 21:32:16 373

原创 poj 2411 Mondriaan's Dream 经典状压DP+记忆化搜索

转送门:poj 2411 Mondriaan’s Dream题目大意给出一个n*m的棋盘,及一个小的矩形1*2,问用这个小的矩形将这个大的棋盘覆盖有多少种方法。解题思路因为对应于一个方格来讲,有两种状态放或者不放 对应于一个1*2的矩形来说有三种方式:横着放,竖着放,不放 因为列的数量为指数级别的,行为线性的,所以我们选取大的最为行,小的作为列 所有dp[i][j]就表示第i行状态为j的时候方

2016-08-02 01:14:47 422

原创 poj 3254 Corn Fields 状压DP

传送门:poj 3254 Corn Fields题目大意给出一个M*N的矩阵,元素为0表示这个地方不能种玉米,为1表示这个地方能种玉米,现在规定所种的玉米不能相邻,即每行或者没列不能有相邻的玉米,问一共有多少种种植方法。举个例子:2 3 1 1 1 0 1 0 表示2*3的玉米地,现在一共有多少种种植方法呢? 答案:种0个玉米(算一个合法方案)+种1个玉米(4)+种2个玉米(3)+种3个玉米(

2016-08-02 00:45:48 402

HTML5温蒂数据库

HTML5温蒂数据库

2016-11-27

空空如也

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

TA关注的人

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