自定义博客皮肤VIP专享

*博客头图:

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

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

博客底图:

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

栏目图:

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

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

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

原创 一些数学小思维Tips长期更新积累

1.数根的求法 数根的概念:如果把一个数的各位数字相加得到一个和,再把这个和的各位数字相加又得一个和,再继续作数字和,直到最后的数字和是个位为止,那么这个数就是该数的数根。求法:int num[]={9,1,2,3,4,5,6,7,8};root_x = num[x%9];如果x特别大,比如x有100位,可以先用字符串模拟一次得到一个较小的数x’,然后就可以知道x的数根为 root_x=nu

2015-08-27 23:58:52 822

原创 HDU 1025 Constructing Roads (最长上升子序列O(n*logn)算法)

最长上升子序列,比线段树更优的做法。

2015-08-27 21:31:32 468

原创 HDU 3591 The trouble of Xiaoqian (多重背包+完全背包)

http://acm.hdu.edu.cn/showproblem.php?pid=3591题意: 给一些票子的面值,和你拥有每种票子的数量。问你买了T元的东西这个过程一共接触了几张票子。这整个过程包括你给售票员票子和售票员找零钱给你。注意售票员拥有你手中所有票子的无限张。解题思路:过程分为两部分,一部分是给钱给售票员,一部分是售票员找钱。由于我手中只有钱的有限张,所以利用到多重背包,而售票员阿姨找

2015-08-26 22:09:36 448

原创 HDU 2192 悼念512..(多重背包)

http://acm.hdu.edu.cn/showproblem.php?pid=2191直接是模板题啊Orz… 题意是中文不再赘述。 贴个模板防止以后人老眼花记忆力差又忘了怎么写了!!!#include <iostream>#include <cstdio>#include <cstring>#include <algorithm>using namespace std;struc

2015-08-26 15:10:41 503

原创 MultiplePack - 多重背包模板

From《背包九讲》,稍作修改。题目:有N种物品和一个容量为V的背包。第i种物品最多有n[i]件可用,每件费用是c[i],价值是w[i]。求解将哪些物品装入背包可使这些物品的费用总和不超过背包容量,且价值总和最大。基本思路:这题目和完全背包问题很类似。基本的方程只需将完全背包问题的方程略微一改即可。 1.类似完全背包状态转移方程: f[v]=max{f[v-k*c[i]]+k*w[i] }(0

2015-08-26 14:18:01 627

原创 HDU 1171 Big Event in HDU (由01背包演变的水题)

http://acm.hdu.edu.cn/showproblem.php?pid=1171题意:给N组数据,每组数据有两个数分别代表某物品的价值和该物品一共有多少件。问是否能够平均分成两部分A,B,使得这两部分所获得的价值尽可能相等,如果不能平均分,那么输出至少要保证A>B; 解题思路: 因为数据比较水,转化成01背包问题。其实用多重背包也可以解决该问题。将所有物品的总价值算出来然后平均分得到s

2015-08-26 10:35:56 466

原创 CompletePack - 完全背包模板

From《背包九讲》,稍作修改。题目:有N种物品和一个容量为V的背包,每种物品都有无限件可用。第i种物品的费用是c[i],价值是w[i]。求解将哪些物品装入背包可使这些物品的费用总和不超过背包容量,且价值总和最大。基本思路:类似于01背包问题,所不同的是每种物品有无限件。也就是从每种物品的角度考虑,与它相关的策略已并非取或不取两种,而是有取0件、取1件、取2件..等很多种。 01背包的状态转移方

2015-08-26 00:04:38 988

原创 ZeroOnePack - 01背包模板

From《背包九讲》,稍作修改。题目:有N件物品和一个容量为V的背包。第i件物品的费用是c[i],价值是w[i]。求解将哪些物品装入背包可使价值总和最大。 基本思路:这是最基础的背包问题,特点是:每种物品仅有一件,可以选择放或不放。 用子问题定义状态:即f[i][v]表示前i件物品恰放入一个容量为v的背包可以获得的最大价值。 状态转移方程是: f[i][v]=max{f[i-1][v

2015-08-25 19:08:16 529

原创 最短路算法模板

最短路算法 - Floyed 适合于有向图和无向图,并且是解决权值不全为负的最短路问题 利用动态规划解决任意两点间的最短路径的算法 时间复杂度是O(n^3),时间复杂度比较高,不适合计算大数据 相关运用:如果是一个没有边权的图,把相连的两点间的距离设为dis[i][j]=1,不相连的两点设为无穷大,用floyd算法可以判断i j两点是否相连。如果dis[i][i] !=

2015-08-24 20:38:48 546

原创 POJ 1088 滑雪 (DFS+DP)

http://poj.org/problem?id=1088题意: 在一个N*M的map中找最长下降序列的长度。开始用BFS的记忆化搜索,发现总是不能更新找到优解的前面的值。这种情况下,DFS的回溯显得更优秀。 写这篇博客的目的就是为了告诉自己有时候DFS比BFS算法更省时#include <iostream>#include <cstdio>#include <cstring>#inclu

2015-08-23 10:23:31 457

原创 HDU 3016 Man Down(线段树区间单点查询+DP)

http://acm.hdu.edu.cn/showproblem.php?pid=3016题意: 是男人就下100层。这个男人开始在最顶层,并且拥有100的能量,如果他能下到他下面的横木上,他将无条件获得横木的val。他只能从横木的左端点和右端点下落。要是中途他的能量小于或等于0,he will die~解题思路:要求到达最后一层的能量最大值,显然要用DP。一开始自然而然能够想到将这些横木按照从大

2015-08-19 15:29:12 690

原创 HDU 1394 Minimum Inversion Number(线段树求逆序数)

http://acm.hdu.edu.cn/showproblem.php?pid=1394求循环逆序数的最小值。 先介绍用线段树求逆序数的方法:开始时将树的每个节点置为空,tr[i]=0,然后输入一个数就update一次,将输入的 x 放在树中且保证这个节点的 tr[i] = 1,tr[i].l = tr[i].r = x ,每次update完之后再query一次,查询区间是 (x+1,N),

2015-08-17 10:15:37 428

原创 HDU 1251 统计难题(字典树模板题)

题意:先输入单词再输入前缀,统计有相同前缀的单词有多少个。 坑点:一定要用c++交,用g++就T;以前写的字典树从来没有delet这个环节,后来发现自己真是太戳了,借了人家的内存居然不还,补充一下delet模板void del(struct Node *proot){ for(int i=0;i<26;i++) if(proot->next[i]!=NULL)

2015-08-16 11:00:24 426

转载 POJ 3667 Hotel (线段树求最长连续子序列)

http://poj.org/problem?id=3667题意:有一个线段,从1到n,下面m个操作,操作分两个类型,以1开头的是查询操作,以2开头的是更新操作1 查询操作,找一段长度为W的没被覆盖的最左的区间 2 更新操作,将(x,x+D)连续的区域清空引用巨巨的题解: http://www.cnblogs.com/scau20110726/archive/2013/05/07/306541

2015-08-15 17:29:31 520

原创 HDU 1542 Atlantis(扫描线求矩形面积并+离散化)

http://acm.hdu.edu.cn/showproblem.php?pid=1542题意就是给n个矩形,这些矩形可能存在覆盖的地方,求矩形面积并。这种题目要用到扫描线,同时还要用到离散化(一时因为数据特别大,二是因为题目中存在浮点数)。扫描线:一根虚拟的线,从下往上(或者从左往右)扫所求的图形,如下图所示,一条从下往上的直线扫到该4条线,并将图形分成三个部分分别来求面积。扫描线解法(从下往上

2015-08-14 22:53:37 615

原创 POJ 2528 Mayor's posters (线段树+离散化)

http://poj.org/problem?id=2528这题一定要写个题解。Orz。 不信看图,五月多做过一次,一直RE。现如今来做,仍然RE多发。题意:在墙壁上贴广告,广告的版面有大有小,并且贴广告有先后之分,后面贴的广告会覆盖前面的广告,求解最后能看到的广告面。本题数据太大,要用到离散化,意思是将区间范围很大的数据集映射到较小的数据集。 离散化的步骤:读取一对区间(x,y),用一个结构

2015-08-12 15:44:26 376

原创 HDU 2473 Junk-Mail Filter (并查集的删除操作)

并查集的删除操作中心思想:初始化的时候,假使每个节点的root[i]=i(每个点的父节点都是它自己),然后删除某个父节点的时候,该节点可能有多个子结点,就不能保证该节点的其他节点仍然在这个集合里面。解决方法是:将这些点的父节点指向别的数,删除该点时将该点的父节点指向集合以外的数。(说不清楚,详情见代码)对于样例: 5 6 M 0 1 M 1 2 M 1 3 S 1 M 1 2 S 3我

2015-08-12 00:24:52 360

原创 HDU 1426 Sudoku Killer

http://acm.hdu.edu.cn/showproblem.php?pid=1426题意:填数独的游戏,保证每行、每列,以及每个3x3的方格都包含1-9这九个数字。DFS:用VIS[3][N][N]来标记,分别标记行,列和3*3的方格。 输入输出格式有点怪,输入用scanf->wrong answer,用cin ->Accepted 输出的时候注意每两组数据间有个空格,但是最后一组数据后

2015-08-08 09:44:24 347

原创 HDU 1885 Key Task + HDU 4771 Stealing Harry Potter's Precious(状压)

这两题都是多个物品取和不取的问题,一般用二进制存储。假设有K件物品,就开一个vis[N][N][1 << K]的数组来表示当前这个点已经得到了几件物品。其实可以开这个一个数组vis[N][N][2][2][2][2],也可以达到同样的效果,但是当k很大的时候会很麻烦。 当K为4时,编号为0,1,2,3。当前的状态用sta来表示: 当只取了0时:sta = 1<<0,此时的sta为1,二进制为 0

2015-08-06 20:52:23 288

原创 HDU 3912 Turn Right + HDU 1254 推箱子 + HDU 1983 Kaitou Kid - The Phantom Thief (2)

http://acm.hdu.edu.cn/showproblem.php?pid=3912 这题应该算是个模拟题。题意大概是这样的: 一个n*m的网格,在第一行有个入口,第n行有个出口。然后人在里面行走必须满足如下条件:如果能向右走,就向右走,若不能向右走就向前走,如果不能向前走就向左走,如果不能向左走就像后走。题目中明确规定了可以保证从入口走到出口。问你的是:先从入口走到出口,再从出口走到入

2015-08-05 22:30:50 791

原创 HDU 1180 (诡异的楼梯)+HDU 2102 (A计划)

之前自己也写过这两题,但是感觉真是神坑,不管怎么都过不了。今天巍神开了专题后又有这两题,于是我就开始认真写和debug。竟然AC了好开心。来总结下坑点。诡异的楼梯 题意: S是起点,T是终点,*是障碍物,| 和 — 是楼梯。楼梯很特别,每隔一秒换一个方向。人可以停留在任意一个点上,但是不能停留在楼梯上。 解题方法: 利用BFS优先队列。有一点需要注意的是当你走到楼梯口时,从楼梯这边到楼梯那边只需

2015-08-03 15:37:52 293

原创 搜索DFS+BFS和剪枝问题

HUD 1010题意:输入一个n*m的迷宫,和一个T:可以在迷宫中生存的最大时间。S为起点,D为终点。并且,每个格子只能踩一次,且只能维持一秒,然后该块地板就会塌陷。所以你必须每秒走一步,且到D点时,所用时间为T。用深搜。之前,误以为就是找到最短路,结果不是,而是恰好T秒走出迷宫。用DFS,超时可见剪枝的重要。 这题的剪枝主要是两个方面。 1:利用曼哈顿距离剪枝 —– 算出终点到该点的距离,与剩

2015-08-02 17:53:42 948

原创 POJ 3264 Balanced Lineup(RMQ求区间最值)

区间查询最大值或者最小值神模板加神题解: http://blog.csdn.net/liang5630/article/details/7917702http://blog.csdn.net/liang5630/article/details/7917706博主很懒,什么都不想留下..

2015-08-01 10:38:01 338

原创 KMP模板

void calnext()//计算next数组{ int i=0,cnt=-1; next[i]=cnt; while(i<len) { if(cnt==-1 || str[i]==str[cnt]) i++,cnt++,next[i]=cnt; else cnt=next[cnt]; } return;}bool

2015-08-01 10:33:13 392

原创 字典树模板

字典树:用于统计,排序和保存大量的字符串(但不仅限于字符串)。它的优点是:利用字符串的公共前缀来减少查询时间,最大限度地减少无谓的字符串比较,查询效率比哈希树高。3个基本性质:根节点不包含字符,除根节点外每一个节点都只包含一个字符; 从根节点到某一节点,路径上经过的字符连接起来,为该节点对应的字符串; 每个节点的所有子节点包含的字符都不相同。其基本操作有:查找、插入和删除,当然删除操作比较少见

2015-08-01 10:10:35 303

空空如也

空空如也

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

TA关注的人

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