自定义博客皮肤VIP专享

*博客头图:

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

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

博客底图:

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

栏目图:

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

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

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

原创 小强的LINUX【DFS】

描述在Linux操作系统中,软件包的安装是有依赖关系的,假设你要安装A软件包,如果A软件包依赖于B软件包,那么你必须先安装B软件包,否则安装A软件包时会出现异常情况,当然也存在一些软件包不依赖于其他软件包便可安装。小强最近要入门Linux系统,于是要安装许多软件包,每个软件包需要花费一定的安装时间,所以这成为一件头疼的事儿。小强有N个软件要安装分别以一个整数表示1,2,3...N。

2013-08-24 15:23:51 1910

原创 最长波动序列【模拟】

描述有一个长度为N的整数序列,序列里面的数是两两不同的,现在要在里面找一个波动序列,这个序列越长越好。比如有波动序列{a0,a1,a2…an-1},则a0 > a1 a3 输入第一行输入一个数T,代表有T个任务,T不大于50。对于每个任务,输入格式为N a0 a1 a2 … aN-1 其中N输出对于每个任务,输出最长的波动序列长度样

2013-08-23 23:08:52 729

原创 最大子矩阵和【dp】

描述布欧可以把人变成巧克力吃了来增加他的能量,也有可能减少。现在布欧变了n*m个巧克力,并把巧克力排成一个n*m的矩形,现在布欧想选择一个子矩形,把这个子矩形吃了来增加他的能量,可他不知道选哪个才能使他的能量增加值p最大,布欧也可以选择一个都不吃,这样p = 0。现在布欧要你告诉他p的最大值,不然他就先把你变成巧克力吃了!输入第一行:一个

2013-08-23 17:08:48 750

原创 皇后问题的变异【DFS】

Description             在国际象棋中,皇后能攻击同一横线、同一竖线、同一斜线(45 度)的敌人。众所周 知,有一个非常著名的算法问题,是求在一个 n×n 的国际象棋棋盘中最多能摆放多少个皇 后,使其不能相互攻击。今天我们暂且不要让问题如此理想化。假设棋盘上有一些障碍物, 皇后不能摆在障碍物上,同时也不能穿过障碍物攻击别人。在此条件之下,棋盘上最多又能 放多少个皇后?

2013-08-23 11:47:08 939

原创 表达式求值【栈的应用】

表达式求值          西西设计的机器人卡多掌握了加减法运算以后,最近又学会了一些简单的函数求值,比如,它知道函数min(20,23)的值是20 ,add(10,98) 的值是108等等。经过训练,西西设计的机器人卡多甚至会计算一种嵌套的更复杂的表达式。假设表达式可以简单定义为:1.  一个正的十进制数 x 是一个表达式。2.  如果 x 和 y 是 表达式,则 函数min(

2013-08-22 19:13:54 751

原创 HDU 1045 fire net【二分匹配或者DFS】

思路:         二分匹配难点就在于建图,怎样有效的建立好模型,决定这个题的成败—         方法一:此题数据范围较小,可以搜索(DFS)—        —方法二:以“方格块”建图,每个横向的连续空地作为一个X集的结点,每个纵向的连续空地作为一个Y集的结点          以题目的第一个例子作说明:          如下是所建的图:

2013-08-22 10:45:59 588

原创 poj1151(线段树+离散化)

DescriptionThere are several ancient Greek texts that contain descriptions of the fabled island Atlantis. Some of these texts even include maps of parts of the island. But unfortunately, these map

2013-08-21 00:20:18 919

原创 合并果子【单调队列】

【问题描述】  在一个果园里,多多已经将所有的果子打了下来,而且按果子的不同种类分成了不同的堆。多多决定把所有的果子合成一堆。     每一次合并,多多可以把两堆果子合并到一起,消耗的体力等于两堆果子的重量之和。可以看出,所有的果子经过n-1次合并之后,就只剩下一堆了。多多在合并果子时总共消耗的体力等于每次合并所耗体力之和。    因为还要花大力气把这些果子搬回家,所以多多在合并果

2013-08-20 12:45:13 2373

原创 棋盘寻宝变种【dp】

思路:                  与上一篇棋盘寻宝不同的是加了一个限制条件,即不超过最大上限的最大值,很有点背包的味道,但是有与背包问题不同的是,背包里面物品可以选和不选,而这里要走下去,就必须得把棋盘上此点的礼物给拿着,但是如果超过了限制,这走不到此点,那么此点的最大值就变为0;  AC code       #include#includeint map[8][8];in

2013-08-19 21:11:21 1022

原创 棋盘寻宝【dp】

题目描述:现在有一个8*8的棋盘,上面放着64个价值不等的礼物,每个小的棋盘上面放置一个礼物(礼物的价值大于0小于1000),一个人的初始位置在棋盘的左上角,每次他只能向下或向右移动一步,并拿走对应棋盘上的礼物,结束位置在棋盘的右下角,请设计一个算法使其能够获得最大价值的礼物。输入:输入包含多个测试用例,每个测试用例共有8行8列,第i行的第j列的数字代表了该处棋

2013-08-19 20:54:17 1571

原创 HDU 3045 Picnic Cows【dp斜率优化】

思路:        首先排序        状态转移方程:dp[i]=min{dp[j]+(sum[i]-sum[j])-a[j+1]*(i-j)}        AC代码:#include#include#define N 400010_int64 dp[N],sum[N],a[N];int q[N];int n,T;int head,tail;int cmp(c

2013-08-10 17:32:49 1143

原创 HDU 3480 Division【dp四边形不等式优化】

思路:        首先排序,然后也是划分题型,在i的子串中选取j段        状态转移方程dp[i][j]=min{dp[k][j-1]+(a[i]-a[k+1])^2}        AC代码:#include#include#define N 10005#define M 5005#define inf 0x3f3f3f3fint dp[N][M];int

2013-08-10 17:17:30 1378

原创 HDU 3057 Print Article【dp斜率优化】

思路:         dp[i]=min{dp[j]+(sum[i]-sum[j])^2+M}(dp[i]表示前i个字的花费,0   AC代码:#include#define N 500010int dp[N];int q[N];int head,tail;int sum[N];int a[N];int n,m;int getDP(int i,int j){

2013-08-10 17:06:58 1015

原创 HDU 2829 Lawrence【dp四边形不等式优化】

思路:       状态转移方程:       dp[i][j]=min{dp[k][j-1]+cost[k+1][i]}(dp[i][j]表示前i个点去j段,cost[k+1][i]根据题意表示k+1到i之间的价值)       cost[i][j]=cost[i][j-1]+a[j]*(sum[j-1]-sum[i-1])(可以找到规律,所以上一个计算出的cost来计算后者)A

2013-08-10 17:00:07 1089

原创 HDU 4258 Covered Walkway【单调队列斜率优化】

思路:       题目中注意的几点:       (1)The points will be in order, from smallest to largest(各点已经排序)         (2)Note that it is possible for x=y. If so, then the contractor would simply charge c.

2013-08-10 16:45:41 688

原创 首尾相连数组的最大子数组和【单调队列】

题目描述:给定一个由N个整数元素组成的数组arr,数组中有正数也有负数,这个数组不是一般的数组,其首尾是相连的。数组中一个或多个连续元素可以组成一个子数组,其中存在这样的子数组arr[i],…arr[n-1],arr[0],…,arr[j],现在请你这个ACM_Lover用一个最高效的方法帮忙找出所有连续子数组和的最大值(如果数组中的元素全部为负数,则最大和为0,即一个也没有选)。

2013-08-07 09:25:00 700

原创 HDU 3415 Max Sum of Max-K-sub-sequence【单调队列】

单调队列: 一、 什么是单调(双端)队列单调队列,顾名思义,就是一个元素单调的队列,那么就能保证队首的元素是最小(最大)的,从而满足动态规划的最优性问题的需求。单调队列,又名双端队列。双端队列,就是说它不同于一般的队列只能在队首删除、队尾插入,它能够在队首、队尾同时进行删除。【单调队列的性质】一般,在动态规划的过程中,单调队列中每个元素一般存储的是两个值:1、在原数列中的位

2013-08-07 09:08:57 640

原创 HDU 1016 Prime Ring Problem【DFS】

思路:         这题的数据比较水,所以DFS不剪枝叶能过;  几个比较新颖的地方:   (1)事先用数组打表判断素数(毕竟个数较少),然后直接O(1)旧可以查到;   (2)还是用到状态标记(防止数据重复),搜索过程中用此方法很好  AC代码: #include#includeint a[25];int viste[25];int b[41]={0,0,1,

2013-08-04 13:43:55 778

原创 HDU 1198 Farm Irrigation 【并查集】

思路:         此题就是基本的并查集的应用。 关于此题的一些处理技巧:(1)如何把A->k块表示出来,从而使之容易判断两块地是否可以归并到一起例如:把A块划分如上图所示,有4个方向,与其他块有通路的方向标记为1,反之为0,所以A={1 1 0 0},其他同理  (2)如何在map中识别是那一块,然后根据这一块找到它的四个方向的0/1情况呢?这里把A->K等效

2013-08-04 09:23:20 611

原创 HDU 1010 Tempter of the Bone 【DFS】

思路:       注意:题目意思不是要求在T秒之前到达门口,不能用BFS,所以要求到达门口的所有情况中刚好在T时刻到达门口的一种情况。   AC代码:    #include#includeusing namespace std;char map[8][8];int viste[8][8];int fx[4]={1,-1,0,0},fy[4]={0,0,1,-1}

2013-08-04 00:35:36 642

原创 HDU 2159 FATE 【二维费用的完全背包问题】

思路:        要注意:最后结果输出时要查找当经验值等于或者大于n时的最小忍耐值m,方可满足最大的保留忍耐值        AC代码:#include#includeint dp[100][100],a[100],b[100];int M,S;void CompletePack(int c,int w){ int m,s; for(m=c;m

2013-08-03 09:54:44 721

原创 HDU 3496 Watch The Movie【二维费用的0/1背包问题】

思路:         要注意的几点:         (1)必须要在N种动漫里面选择M种,所以初始化时dp[L][M]时,除当m=0,dp[L][M]=0外,其他的初始化为负的无穷大;(见背包九讲关于初始化得方法)         (2)最后输出时要满足dp[L][M]不小于0,因为当dp[L][M]在N种动漫里面选择M种(无法完全满足),也是题意:“If DuoDuo can’t

2013-08-03 09:43:29 963

原创 HDU Coins 【多重背包问题】

思路:        题目的意思:手表的价格为m元,要在硬币中选择一些硬币构成多少种不同的总价值p(且使其总价值p在(1->m)之间)        AC代码:#include#includeint dp[100005],c[105],v[105];int m;void CompletePack(int c,int w){ int i; fo

2013-08-03 09:32:33 831

原创 HDU Proud Merchants 【需要排序的0/1背包问题】

思路:       看大牛的解题报告,需要对q-p排序(从大到小);       注意:qsort()函数要用c++编译,用c会报错;       AC代码:#include#include#includestruct node{ int c; int s; int w;}a[505];int dp[5005];int V;i

2013-08-02 09:46:33 627

原创 HDU 2546 饭卡 【隐藏的背包问题】

思路:       题目的意思:如果购买一个商品之前,卡上的剩余金额大于或等于5元,就一定可以购买成功(即使购买后卡上余额为负),否则无法购买(即使金额足够)       如果要使卡上的剩余金额最少,则假设最后剩下5元,肯定是买最贵的一种,则可以在卡最初的剩余金额上欲留出5元,最后买最贵的,所以要事先排好序(菜的金额从小到大),然后卡上剩下的金额可以购买除最贵的菜的所有的菜,使其达到最大价

2013-08-01 20:05:19 645

原创 HDU 2995 Another Panda's Birthday Present(条件概率|概率生成函数 )

大牛的解题报告链接:http://hi.baidu.com/bfcdygoporbjuxr/item/569897ddc1fc561d21e2503f不是很懂

2013-08-01 16:40:25 1080

原创 HDU 1114 Piggy-Bank(完全背包问题)

http://acm.hdu.edu.cn/showproblem.php?pid=1114思路:       此题的解法是完全背包的问题,但是要注意的几点:     (1)求的是最小的代价,与以往的题目求最大的代价不同,但是只要把状态转移方程中的Max函数改成Min函数就OK;     (2)因为题目是要求最小的代价的同时,而且要保证恰好装满背包,所以初始化dp[]数组时,除了d

2013-08-01 15:42:54 729

原创 HDU 2602 Bone Collector(最简单的0/1背包问题)

#includelong dp[1005],w[1005],c[1005];int n;int V;void ZeroOnePack(long c,long w){ int v; for(v=V;v>=c;v--) if(dp[v]<dp[v-c]+w) dp[v]=dp[v-c]+w;}int main(){ int T;

2013-08-01 12:44:35 608

原创 HDU 1059 Dividing (多重背包问题)

思路:                转换为多重背包问题,将总价值求出,然后分两半,对于一个人当总花费为总价值的一半时,看得到的价值是否相等总花费;     AC代码: #includeint a[7];int dp[120000];int V;void CompletePack(int c,int w){ int v; for(v=c;v<=

2013-08-01 11:18:50 597

原创 背包问题九讲

点击打开链接

2013-07-31 21:32:31 547

原创 HDU 1058 Humble Numbers (DP)

思路:通过 2 ,3 ,5, 7这4个数来构造Humble Numbers;对于用dp[]数组存的数要事先打表;AC代码:#includeint dp[5843];int n;int Min(int a,int b,int c,int d){ if(a<=b&&a<=c&&a<=d)return a; else if(b<=a&&b<=c&&b<=d)ret

2013-07-31 12:44:57 484

原创 HDU 1025 Constructing Roads In JGShining's Kingdom

思路:        仔细考虑就是求最长公共子序列问题         最长公共子序列的算法:        (1)通过dp求,好理解O(n*n);(此题不能用DP会超时)        (2)通过二分法求O(n*lgn);           过程如下:假设存在一个序列d[1..9] = 2 1 5 3 6 4 8 9 7,可以看出来它的LIS长度为5。下面一步一步试

2013-07-31 09:01:32 639

原创 HDU 1300 Pearls (DP)

思路:DP题型一般找状态转移方程考虑应从整体出发,到局部,再通过最优子结构到整体最优,其次就是边界问题的考虑,一般是从底向上考虑,得出边界。 此题最主要的考虑是不能跳跃的用质量大的珠宝来代替质量小的珠宝,只能连续的代替;AC代码:#include#define inf 0x3f3f3f3fstruct node{ int ai; int pi;}a[

2013-07-30 19:30:23 737 1

原创 HDU 1254 推箱子 (bfs嵌套)

思路:    注意以下3点:   (1)要考虑人是否能走到推箱子的地方   (2)箱子经过的格子可以再次经过,而箱子经过同一个格子从同一个方向来的只能有一次,也就是不能再次从同                     一方向推回原来的地方(因此要用到方向数组)   (3)人不能穿过箱子     AC代码如下:      #includestruct{

2013-07-30 13:37:25 818

原创 算法导论求n个点的最小距离

算法: 0:把所有的点按照横坐标排序 1:用一条竖直的线L将所有的点分成两等份 2:递归算出左半部分的最近两点距离d1,右半部分的最近两点距离d2,取d=min(d1,d2) 3:算出“一个在左半部分,另一个在右半部分”这样的点对的最短距离d3。 4:结果=min(d1,d2,d3) 关键就是这第3步。貌似这需要n^2的时间,把左边每个点和右边每个点都对比一下。其实

2013-07-29 13:53:21 5336 1

原创 qsort的用法

** 关于快排函数的一些说明 **qsort,包含在stdlib.h头文件里,函数一共四个参数,没返回值.一个典型的qsort的写法如下qsort(s,n,sizeof(s[0]),cmp);其中第一个参数是参与排序的数组名(或者也可以理解成开始排序的地址,因为可以写&s[i]这样的表达式,这个问题下面有说明); 第二个参数是参与排序的元素个数; 第三个三数是单个元

2013-07-29 09:46:35 918

原创 HDU 1253 胜利大逃亡(BFS)

思路:最简单的广度优先搜索(BFS),与走迷宫类似; AC代码:#include#define N 50int map[N][N][N];int fx[6]={1,-1,0,0,0,0},fy[6]={0,0,1,-1,0,0},fz[6]={0,0,0,0,1,-1};struct{int x;int y;int z;int pre;int num;}sq[N*N*N

2013-07-28 17:55:00 732

原创 HDU 1244 Max Sum Plus Plus Plus(DP)

思路:       此题和HDU 1024  Max Sum Plus Plus属于同一类型的题目,只不过此题限定了段的长度;       状态转移方程:dp[i][j]=max(dp[i][j-1],dp[i-1][j-ml[i]]+sum[j]-sum[j-ml[i]])

2013-07-28 09:46:21 647

原创 HDU 1024 Max Sum Plus Plus

思路:dp[i][j]表示前j个元素分成i段的最优解.转移方程:dp[i][j]=max{dp[i][j-1]+a[j],max(dp[i-1][j-1]+a[j],dp[i-1][j-2])}每一个i其中j的上下界的确定,现在分别解释上界和下界:上界:dp[i][j]中,如果j=i-1,意思就是在前面i-1个元素中分成i段,这个是不可能实现的,所以上界为i;

2013-07-27 17:23:38 616

转载 KM算法及其具体过程

KM算法及其具体过程】(1)可行点标:每个点有一个标号,记lx[i]为X方点i的标号,ly[j]为Y方点j的标号。如果对于图中的任意边(i, j, W)都有lx[i]+ly[j]>=W,则这一组点标是可行的。特别地,对于lx[i]+ly[j]=W的边(i, j, W),称为可行边;(2)KM 算法的核心思想就是通过修改某些点的标号(但要满足点标始终是可行的),不断增加图中的可行边总数,直到

2013-07-18 20:59:14 946

Android ADT

Android ADT 属于安卓移动编程开发的一个工具,要先安装Java JDK 然后再安装ADT开发工具既可

2013-04-02

空空如也

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

TA关注的人

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