自定义博客皮肤VIP专享

*博客头图:

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

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

博客底图:

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

栏目图:

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

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

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

原创 HDU 1874 畅通工程续

个人想法 研究了一下spfa和dijkstra,虽然dijkstra快,而且时间效率高,比较稳点,但是写个模板真的要写好多,我感觉好烦,我去,网上看了一下spfa,其实跟用优先队列优化的dijkstra没什么特别大的区别,但是spfa可以解决有负边出现的问题,应用范围比dijkstra广,所以我又打算搞一个spfa的模板。。不容易呀!! #include <cstdio> #include <q

2016-06-19 23:32:18 257

原创 HDU 3790 最短路径问题

题目分析 这道题就是一道最短路的基础题,直接套模板就可以了,当然需要注意一点就是题目所说的如果存在多个最短路径需要找出花费最小的。这道题用了280MS,我已经用队列优化过了,可能用vector实现邻接表没有直接写邻接表快。 #include <cstdio> #include <queue> #include <vector> #include <cstring> #include <iostr

2016-06-19 20:20:53 226

原创 HDU 1506 Largest Rectangle in a Histogram

题目分析 首先需要找到最左边以及最右边比h[i]大的位置,这样结果就很容易算出来,ans = h[i]*(r[i]-l[i]+1);但是求l[i]以及r[i]如果不进行优化的话会直接超时,因此我们可以利用前面所求的l[0….i-1]来更快的得到l[i],本题的难点也在这。自己拿手对着代码推一遍你就会理解了,详细的请看代码。 #include <cstdio> #include <cstring>

2016-06-19 17:37:09 227

原创 HDU 2571 命运

题目分析 跟数塔问题差不多,只需要注意题目加的(每次可以走一格或者走到该行的列数是当前所在列数倍数的格子)要求即可。 #include <cstdio> #include <cstring> #include <iostream> #include <algorithm> using namespace std; const int INF = 0x3f3f3f3f;int maze[25][1

2016-06-19 16:18:02 173

原创 NYOJ 745 蚂蚁的难题(二)

题目分析 首先求不成环的时候最大值得到一种结果,在此过程中求连续子段和的最小值和整段序列的和,另一种结果就是整段序列的和减去最小值,2中比较得到的最大值即为结果。 #include <cstdio> #include <cstring> #include <iostream> #include <algorithm> using namespace std; typedef long long

2016-06-18 20:53:44 261

原创 HDU 2845 Beans

题目分析 这道题很明显就是求最大的序列,但是选择的时候有要求,对于同一行来说,选取了一列,则相邻列的都不能选择,对于不同行,选取了这一行那么相邻行不能选,这样结果已经很明显了,做2次dp就可以了。 #include <cstdio> #include <cstring> #include <iostream> #include <algorithm> using namespace std; c

2016-06-16 16:33:11 214

原创 HDU 1864 最大报销额

题目分析 这道题是一个很显然的01背包问题,但是需要注意一下几点:1.每张发票的总额不得超过1000元。2.单项物品的价值不得超过600元。3.只能报销A,B,C三种物品,有其他物品的一律不给于报销。4.这道题精确到小数点后2位,因此只需要将double类型*100保存为整型即可。5.每种类型的物品可能会多次给出(不止一次)。 #include <cstdio> #include <cstrin

2016-06-16 12:03:06 317

原创 HDU 2639 Bone Collector II

题目分析 这道题要求第K大背包,很显然数组增加一维K,01背包的状态转移式 为dp[i][j] = max(dp[i-1][j], dp[i-1][j-vol[i]] + val[i]); 很明显可以看出dp[i][j]只与公式后面的2个状态有关,因此只要在推的过程中 保存中间值,然后取出前K大的存储在dp[i][j][1…K]之中即可; #include <cstdio> #

2016-06-16 10:10:20 338

原创 HDU 3496 Watch The Movie

题目分析 这道题毒很深,因为前一题写的也是2维背包,写到这一题直接就把状态转移方程写出来了,但是一直wa到死,完全不知道为什么!!后来看了一下别人的博客,博客上说有可能价值为负数!!我就呵呵哒,我在想这个女孩中毒不浅呀!!自己不喜欢的也列出来让她uncle买!!于是把初始化给改了就过了!!。 #include <cstdio> #include <cstring> #include <iostr

2016-06-14 11:39:53 363

原创 HDU 2159 FATE

题目分析 大家都知道2维的01背包可以压缩为1维的,同样1维的完全背包也是可行的, 平时我们做的题得到一件物品牺牲的是体积,但这道题不一样,这道题牺牲了 忍耐度和xhd能杀死的怪的个数,这样一来就很明显了,直接套用公式,然后 加上怪的个数这一维就可以了。 #include <cstdio> #include <cstring> #include <iostream> #incl

2016-06-14 10:20:49 218

原创 HDU 1059 Dividing

多重背包,模板题,直接上代码 #include <cstdio> #include <cstring> #include <iostream> #include <algorithm> using namespace std; int a[10],dp[300005];int main() { int kase = 1; while(scanf("%d", &a[1]) != EOF

2016-06-13 20:28:12 243

原创 HDU 1114 Piggy-Bank

题目分析这道题很明显是一道完全背包问题,每种硬币相当于无数个,但是初始化的时候应该注意,应该初始化为INF,这样才能求出最小值,最后只需要判断一下dp[硬币的总价值]是否等于INF即可,大家同时需要注意一点,我用memset将dp初始化为INF,为什么这样可以呢,因为INF我用的16进制表示,memset是按照1字节为单位对内存进行扩充,所以这样写是合理的,但是初始化为1就不行,初始化为-1可以,因

2016-06-13 12:01:49 323

原创 HDU 2059 龟兔赛跑

题目分析这道题研究了有点时间了,想到由上一个状态推这一个状态,但是后来发现自己不对,还有就是有可能充电之后到下一个充电的地方可能没到C米,然后就手忙脚乱,后来发现自己的状态转移写错了,看了一下评论区,大神说他写的代码看不懂他死给你看,写的very nice,一遍就看懂了。我就不粘贴自己丑丑的代码了,直接上大神代码。/* 这道题目是DP中多阶段决策的典型例题 我们将起点和终点划分到N个加电站中去 这样

2016-06-12 13:21:38 224

原创 最短路模板

个人理解 自己以前也做了一些最短路的水题,基本上都差不多,所以这里我写一个模板,以后留着方便自己使用。当然我用模板的这道题是POJ 2378 Til the Cows Come Home。 大家可以发现,直接用邻接矩阵存的话空间开销很大,用时为O(n^2),但是最短路算法在图论中实在太重要了,因此需要优化。显然可以用邻接表优化,优化后的时间复杂度为O(logn*m),大家知道m最大可

2016-06-11 12:10:47 351

原创 HDU 1466 计算直线的交点数

题目分析 这道题主要是要了解一个过程,就是动规转移方程是怎么构造的。这里面递推的时候要使用枚举的思想,假如有n条线,我们从一开始枚举,就是有一条直线平行,当然一条直线没法平行,意思就是,剩余的n-1条直线相交得到的点数加上这n-1条线与那一条直线相交得到的交点数的和即为n条直线相交得到的交点个数。继续枚举,知道枚举到有n-1条直线平行的即可。 #include <cstdio> #include

2016-06-10 19:58:43 261

原创 HDU 1540 Tunnel Warfare

题目大意 给定一个区间,有3种操作方式,操作为D是,摧毁a点,操作为Q时,询问包括a在内相怜的结点数,操作为R是,重新建立最近一次摧毁a点。 题目分析 本题为线段树区间合并,因为必须更新到叶子节点,所以不需要设置延迟标记,直接更新到叶子节点就可以了。 #include <cstdio> #include <cstring> #include <iostream> using namespac

2016-06-09 16:09:05 246

原创 POJ 3667 Hotel

题目大意 我用自己的话概括一下,给一段长为n的空区间,有2种操作,一种就是找到最左边长为w的连续的空区间并返回这段空区间最左边的区间号。另一种就是将从区间号a开头长度为b的这一段区间清空。 题目分析 这道题是关于线段树区间合并的基础题,不过自己想了很久,自己也写了十几篇的线段树的博客有了自己线段树的风格,其实个人感觉挺简约的,看着也挺舒服,感觉封装在结构体中挺丑的,什么都要加个前缀。

2016-06-09 10:32:52 328

原创 HDU 2844 Coins

题目分析这道题很明显是一道完全背包的题,但是对于只学过01背包的菜菜来说很明心要超时,于是开始学习背包九讲,这里我先摘取一段优化的代码: 另一种好想好写的基本方法是转化为01背包求解:把第i种物品换成n[i]件01背包中的物品,则得到了物品数为Σn[i]的01背包问题,直接求解,复杂度仍然是O(V*Σn[i])。 方法是:将第i种物品分成若干件物品,其中每件物品有一个系数,这件物品的费

2016-06-04 11:56:53 292

原创 浅谈java多线程

进程和线程 进程和线程都是一个控制流程。 一个进程通常对应一个程序 一个程序可以由多个不同的线程构成 进程是可用于资源的独立单位 进程同时又是一个可独立调度和分派的基本单位 线程因为具有许多进程所具有的特征,因此被称为轻量级进程。 线程是进程中的实体,一个进程可以拥有多个线程,一个线程必须有一个父进程。 线程不拥有系统资源,只拥有运行必须的一些数据结构;

2016-06-02 22:28:55 361

空空如也

空空如也

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

TA关注的人

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