自定义博客皮肤VIP专享

*博客头图:

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

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

博客底图:

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

栏目图:

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

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

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

原创 Firefox 标签效率提升方案

Firefox 标签效率提升方案前言TL; DR.详细教程TreeStyleTabTabRetitleSimpleTabGroupsVimium-FFDuplicate Tab CloserFirefox userChrome.css最终效果前言你是不是还在为标签开的太多而焦头烂额?你是不是还在为开会时找不到想要的标签页而抓狂?你是不是还在一个一个地刷新标签页?相信浏览器标签页的管理是每一个码农都面临的问题,工作中随随便便就需要打开几十个网页,更有甚至达到上百,如何高效地管理标签页资源是一个提升效率的重

2021-11-12 19:41:16 1488

原创 [容易] UVa OJ 10048 噪音恐惧症 Floyd

题目描述课本365基本思路:本题就是一个变形的Floyd算法,本身Floyd是求两点之间最短路的,这里只不过是让你求两点之间路径上最大权值最小的,只需要将Floyd稍加修改即可。具体代码:#include #include using namespace std;int S,C,Q;const int maxn=100+5;int G[maxn][maxn];i

2017-09-15 10:59:03 451 1

原创 [中等] UVa OJ 247 Calling Circles Floyd和求连通分支

题目描述基本思路:课本365具体代码:#include#include#include#include#includeusing namespace std;vector names;int ID(const string& s) { for(int i = 0; i < names.size(); i++) if(names[i] == s) return

2017-09-15 10:56:20 237

原创 [中等] UVa OJ 1395 Slim Span

题目描述基本思路:本题本质上就是让你从给定无向图的所有支撑树中找出边权值之差最小的那个,很像是一个变形的BST(最小生成树)问题,然而,BST问题可以通过贪心每次选择权值最小的那条边来解决,可本题不行,并没有类似的贪心策略,因此我们还得考虑枚举。因为本题要求的是权值之差最小,因此我们可以先排序,再按照这个序列顺序进行枚举(类似滑动窗口),这样可以使枚举量大大减少。当然,本题需要判连通,

2017-09-13 10:23:33 202

原创 [中等] UVa OJ 12186 Another Crisis

题目描述基本思路:某种程度上我觉得这个题不应该算动态规划了,因为本身也没有重复求解的结点,而且也不是啥状态转移,我觉得应该算一个关于树的问题。关于树的问题大部分都可以递归求解,本题也是。设让员工i签字并且向上递送所需要的工人签字数为d[i],则d[i]=sum{d[j],d[k],d[l],...},其中d[j],d[k],d[l]...为把i的直接下属的d值从小到大排序后前c个,其中c=

2017-09-12 15:35:10 208

原创 [中等] UVa OJ 10003 Cutting Sticks 动态规划

题目描述基本思路:本题就像是一个逆向的堆石子问题,堆石子是把石子堆起来,而这次是把木棍切开来,但实际上解起来都是一样的。状态转移方程:d[i][j]=min{d[i][k]+d[k][j]}+a[j]-a[i],i其中d[i][j]表示切割第i个切割点到第j个切割点之间的木棍需要的最小花费,a[i]表示第i个切割点的实际长度,k为i与j之间的切割点。具体代码:#include

2017-09-11 15:40:53 241

原创 [偏难] UVa OJ 1625 Color Length 动态规划

题目描述基本思路:(书中页码276)d[i][j]表示a序列已经拿了i个,b序列已经拿了j个放到最终序列中时,最终序列所产生的最小花费。状态转移方程:d[i][j]=min{d[i-1][j]+c[i-1][j],d[i][j-1]+c[i][j-1]},c[i][j]表示已经在a序列和b序列分别拿了i个和j个后,在最终序列中再放入一个时所产生的花费,也就是当前最终序列中已经开始还没有

2017-09-10 17:04:33 215

原创 [中等] UVa OJ 11400 Lighting system design 动态规划

题目描述基本思路:(类比最长上升子序列LIS问题)首先,对于每种电源的灯泡要么全换,要么不换,因为不能将大电压的灯泡换成小电压的,因此先将灯泡按电压大小排序,排完序后,就是一个考虑第i种灯泡换不换的问题了,是个多阶段决策问题,因此考虑动态规划。设d[i]为前i种灯泡的最小费用,s[i]为前i种灯泡的总数,c[i]为第i种灯泡的单价,k[i]为第i种灯泡的电源价格,则状态转移方程为:d[

2017-09-09 20:51:43 214

原创 [中等] UVa OJ 116 Unidirectional TSP 动态规划

题目描述基本思路:首先这是一个多阶段决策问题,所以考虑采用动态规划来解。而题目最后输出路径时要求按字典序,所以从后向前进行迭代求解。状态转移方程:d[i][j]=cost[i][j]+min{d[i-1][j+1],d[i][j+1],d[i+1][j+1]}。不过此处要注意因为允许“wrap",所以当i-1应为(i-1+m)%m,而i+1应为(i+1)%m。然后对于如何打印路径,

2017-09-08 11:20:17 184

原创 [较难] UVa OJ 12174 Shuffle 滑动窗口

题目描述基本思路:先通过滑动窗口求出所有s元素子序列是否不含重复元素。然后判断所有可能的分割位置是否可行。注意当输入序列元素数小于歌曲数的时候,是个个例,要单独处理。书中页码247具体代码:#include using namespace std;const int maxn=100000+5;int f[maxn],h[maxn*3];bool ok[maxn*3]

2017-09-07 19:51:10 242

原创 [中等] Uva OJ 1608 Non-boring sequences

题目描述基本思路:本题题意是让检查输入序列的所有子序列是否都有一个唯一元素,即:该元素在该子序列中仅出现一次。基本过程:若输入序列为A[0]...A[n-1],则先在该序列中寻找唯一元素,若找不到,则该序列为boring 序列,若找到且它的下标为m,则接着分别在A[0]...A[m-1]和A[m+1]...A[n-1]这两个子序列中找,如此递归下去。算法优化:(1)优化判断一个

2017-09-06 16:17:28 166

原创 [较难] UVa OJ 714 Copying books

题目描述本题比较难,本人自己写了一份代码,但没有AC,下面给出《算法竞赛入门经典》书上代码,书上页码244本题较难,仅Mark// UVa714 Copying Books// Rujia Liu#include#include#includeusing namespace std;const int maxm = 500 + 5;int m, k, p[maxm];

2017-09-06 11:19:48 211

原创 [容易] UVa OJ 11572 Unique Snowflakes 滑动窗口

题目描述基本思路:本题实际上就是找各元素互不相同的最长连续子序列,因为是连续的,所以可以采用滑动窗口来做,若L为窗口的左端点,R为窗口的右端点,则先扩展R,如果不能继续扩展,则扩展L,继续扩展R,直到R指向全序列的最后一个元素。具体代码:#include #include #include using namespace std;vector sf;int solve(

2017-09-05 10:55:07 245

原创 [容易] UVa OJ 120 Stacks of flapjacks

题目描述思路:按照从大到小的顺序依次把煎饼翻到对应的位置,翻的方法如下,先把对应大小的煎饼翻到最上面,然后再翻下来。具体代码:#include #include #include #include using namespace std;vector pancakes;vector sortedPancakes;void flip(int n){ int

2017-09-04 10:28:16 220

原创 [中等] UVa OJ 12325 Zombie's Treasure Chest 另类枚举

题目描述思路:本题乍一看,可以用动态规划来解啊,就是一个有限容量,无限物品,物品不可分的装箱问题嘛,也就是DAG的最长路最短路模型。确实这种思路是可行的,但实现起来不可行,因为本题的容积最大为32位整数的最大值,这样开数组占太多内存了,所以需要另辟蹊径。注意到,本题的物品只有两种,不难想到可以直接枚举物品(动态规划是枚举容积),枚举物品自然会产生一个问题,枚举哪个物品呢,很显然,要枚举

2017-09-02 16:54:35 213

原创 [中等] UVa OJ 10603 Fill BFS状态搜索

题目描述思路:其实这道题和我之前写的一篇文章中的题目类似,不过那道题题意比较简单,只需要简单的BFS状态搜索就可以,本题的题意就要复杂一些了,编码也发生了一些变化,因此将其归为中等题目。要说思路,首先看完题,就知道这是个BFS状态搜索题目,很常规,不过有几个细节要注意:(1)本题要求的不是最少步数,而是倒水的量,这个很重要。(2)本题无解时要求出最接近的d',一定要注意这里的d

2017-09-02 16:12:10 192

原创 [容易] UVa OJ 11059 Maximum product 简单枚举

题目描述思路:本题只是一个简单枚举,十分简单,但感觉编码有些技巧,就索性把代码贴上来了。具体代码:#include #include using namespace std;int main(){ //freopen("input.txt","r",stdin); int n; int a[18+3]; int kase=0; wh

2017-09-02 10:32:39 233

原创 [容易] UVa OJ 725 Division 暴力枚举

题目描述思路:本题可以通过简单枚举来实现,不过需要注意的是只需要枚举分子或分母即可,无需全部枚举。具体代码:#include #include using namespace std;int main(){ int N; vector digits; bool first=true; for(cin>>N;N!=0;cin>>N)

2017-09-01 20:10:10 274

原创 [中等] UVa OJ 804 Petri Net Simulation

题目描述思路:本题实际上只是个简单的模拟,只不过题目比较长,理解起来有些难度,故划为中等难度。不过另人费解的是我下面的代码不论我如何修改输出格式总是PE,如果哪位读者发现我下面代码输出格式的问题,还请评论指出,在此提前表示感谢。具体代码:#include #include using namespace std;const int maxn=100+4;vector

2017-09-01 19:45:22 227

原创 [容易] UVa OJ 673 经典括号匹配问题

题目描述思路:本题就是一个简单的括号匹配问题,使用栈便可轻松解决。具体代码:#include #include #include using namespace std;bool isValid(string& s){ stack sc; for(int i=0;i<s.size();++i) { switch(s[i])

2017-09-01 10:58:44 197

原创 [偏难] UVa OJ 1572 有向图判环

UVa OJ 题目都比较长,这里不再叙述题目内容,只给出链接。题目描述思路:这道难就难在思路上,或者说建模上,一量建好了模型,解题就变得非常容易了。对于本题,我觉得我的理解也不是很清晰。暂且简单地这样想吧。(1)我就让这些分子横着接,只要某一时刻我接上一个与之前完全一样的分子那么这个过程这可以无限重复下去,因为分子数是无限的,再想,其实只需要右侧的横截面与之前某一时刻相同即可,这是

2017-08-30 10:14:28 541

原创 [容易] UVa OJ 10562 看图写树

题目描述具体代码#include #include using namespace std;const int maxn=200+5;string tree[maxn];void dfs(int row,int col){ cout<<tree[row][col]; cout<<"("; if(col<tree[row+1].size()&&tree[

2017-08-29 19:44:49 251

原创 [中等] 比较完整的BigInteger高精度整数类(C++实现)

具体代码:其中BigInteger/BigInteger用得应该会少一些,下面代码中的这个函数需要进一步的测试,不过其思想并不难。另外对于求模运算,可以容易地通过除法运算的代码获得。#include #include #include using namespace std;struct BigInteger{ vector s; static const

2017-08-28 17:41:20 2441 1

原创 [容易] bfs状态搜索

九度oj1457题目描述:大家一定觉的运动以后喝可乐是一件很惬意的事情,但是seeyou却不这么认为。因为每次当seeyou买了可乐以后,阿牛就要求和seeyou一起分享这一瓶可乐,而且一定要喝的和seeyou一样多。但seeyou的手中只有两个杯子,它们的容量分别是N 毫升和M 毫升 可乐的体积为S (S输入:三个整数 : S 可乐的体积 , N 和 M是

2017-08-27 17:01:42 281

原创 [容易] 最短路实例(有条件的最短路)

九度oj 1162题目描述:    The country is facing a terrible civil war----cities in the country are divided into two parts supporting different leaders. As a merchant, Mr. M does not pay attention to

2017-08-27 14:47:27 868

原创 [容易] 递归的应用:改进的汉诺塔

题目描述:约19世纪末,在欧州的商店中出售一种智力玩具,在一块铜板上有三根杆,最左边的杆上自上而下、由小到大顺序串着由64个圆盘构成的塔。目的是将最左边杆上的盘全部移到右边的杆上,条件是一次只能移动一个盘,且不允许大盘放在小盘的上面。现在我们改变游戏的玩法,不允许直接从最左(右)边移到最右(左)边(每次移动一定是移到中间杆或从中间移出),也不允许大盘放到下盘的上面。Daisy已经做过原来的

2017-08-25 16:09:22 271

原创 [容易] BFS求最短路(迷宫类问题)

题目描述:Ignatius被魔王抓走了,有一天魔王出差去了,这可是Ignatius逃亡的好机会.魔王住在一个城堡里,城堡是一个A*B*C的立方体,可以被表示成A个B*C的矩阵,刚开始Ignatius被关在(0,0,0)的位置,离开城堡的门在(A-1,B-1,C-1)的位置,现在知道魔王将在T分钟后回到城堡,Ignatius每分钟能从一个坐标走到相邻的六个坐标中的其中一个.现在给你城堡的地图

2017-08-25 10:42:57 878

原创 [容易] DAG的拓扑排序

DAG的拓扑排序可以采用两种方法来求解:入度法和DFSDFS比较好写,而且不需要掌握额外的算法,不过处理起实际问题来,DFS法不如入度法方便,因此在这里我推荐大家采用入度法来求拓扑排序。这里先给出一个入度法的例子,后面会给出一个DFS的例子。题目描述:有N个比赛队(1输入:输入有若干组,每组中的第一行为二个数N(1输出:给出一个符

2017-08-24 17:08:09 545

原创 [中等] 堆优化的Dijkstra实现

题目描述:给你n个点,m条无向边,每条边都有长度d和花费p,给你起点s终点t,要求输出起点到终点的最短距离及其花费,如果最短距离有多条路线,则输出花费最少的。输入:输入n,m,点的编号是1~n,然后是m行,每行4个数 a,b,d,p,表示a和b之间有一条边,且其长度为d,花费为p。最后一行是两个数 s,t;起点s,终点t。n和m为0时输入结束。(1输

2017-08-24 10:35:24 478

原创 [容易] kruskal 算法并查集实现

题目描述:    In an episode of the Dick Van Dyke show, little Richie connects the freckles on his Dad's back to form a picture of the Liberty Bell. Alas, one of the freckles turns out to be a scar, so

2017-08-23 15:47:19 467

原创 [容易] 并查集的优雅实现(实例:求无向图最大连通块结点数)

题目描述:Mr Wang wants some boys to help him with a project. Because the project is rather complex, the more boys come, the better it will be. Of course there are certain requirements.Mr Wang selected

2017-08-23 11:07:23 1506

原创 [难度:容易] 先根和中根构建二叉树

题目描述具体代码#include #include using namespace std;struct Node{ char data; Node* left,*right;};const int maxn=26+4;struct MemPool{ Node mem[maxn]; int cnt; void init()

2017-08-22 17:01:28 638

原创 [容易] priority_queue版Huffman

1.问题描述问题描述在一个果园里,小明已经将所有的水果打了下来,并按水果的不同种类分成了若干堆,小明决定把所有的水果合成一堆。每一次合并,小明可以把两堆水果合并到一起,消耗的体力等于两堆水果的重量之和。当然经过 n‐1 次合并之后,就变成一堆了。小明在合并水果时总共消耗的体力等于每次合并所耗体力之和。    假定每个水果重量都为 1,并且已知水果的种类数和每种水

2017-08-22 16:17:22 216

原创 [中等] 动态规划经典-堆石子问题

1. 问题描述:设有N堆沙子排成一排,其编号为1,2,3,…,N(N【输入格式】    输入由若干行组成,第一行有一个整数,n(1≤n≤100);表示沙子堆数。第2至m+1行是每堆沙子的数量。 【输出格式】    一个整数,归并的最小代价。【输入样例】713781621418【输出样例】2392. 解题思路:首先这也是一个

2017-08-22 15:45:39 3409

空空如也

空空如也

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

TA关注的人

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