自定义博客皮肤VIP专享

*博客头图:

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

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

博客底图:

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

栏目图:

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

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

-+

Collider

愿所有刷过的题都成为你比赛中信手拈来的水题.

  • 博客(17)
  • 收藏
  • 关注

原创 POJ2253-Frogger

题目要求找出点0到点1在每个路径中跳跃距离的最大值中最小的一个。首先初始化数组d,d[i][j]表示从点i跳到点j的最小跳跃距离。将Floyed-Warshall算法变形一下,用临时变量存取从点i跳到点k的最小跳跃距离与点k到点j的最小跳跃距离中的最大值(同一路径取最大值)将该临时变量与以求得的最短跳跃距离d[i][j]比较,取里面最小的一个。#include #includ

2016-05-28 21:44:54 308

原创 POJ1062-昂贵的聘礼

取源点为0,首先建立从0到各个编号的物品的单向边,权值为物品价格。由于一个物品a需要用另一个物品b来优惠,因此建立从b到a的单向边,权值为优惠后的价格。枚举在物品1(酋长的允诺)的地位lev[1]-m范围内的物品地位i在地位i+m的可交易范围内到源点的最短路。则d[1]就是最小的金额。#include #include #include #include #include

2016-05-28 16:37:02 315

原创 POJ3169-Layout

首先,牛是按照编号排序的,所以有d[i]其次,对于每对关系好的牛之间都有d[Al]+Dl>=d[Bl]。同样,对于每对关系不好的牛之间都有d[Ad]+Ddd[i]=d[i],因此从顶点i+1向顶点i连一条权值为0的边。同样,d[Al]+Dl>=d[Bl]对应从顶点Al向顶点Bl连一条权值为d[Bl]的边。d[Ad]+Dd所求问题是d[n]-d[1]的最大值,对应顶点1到顶点

2016-05-27 22:42:41 259

转载 蔡勒公式的推导过程

星期制度是一种有古老传统的制度。据说因为《圣经·创世纪》中规定上帝用了六天时间创世纪,第七天休息,所以人们也就以七天为一个周期来安排自己的工作和生活,而星期日是休息日。从实际的角度来讲,以七天为一个周期,长短也比较合适。所以尽管中国的传统工作周期是十天(比如王勃《滕王阁序》中说的“十旬休暇”,即是指官员的工作每十日为一个周期,第十日休假),但后来也采取了西方的星期制度。 在日常生活中,

2016-05-27 21:08:09 2111 3

原创 POJ3723-Conscription

将男女之间的关系看作一条边,想要费用最少就是找出一个最小生成树。将边从小到大排序后,利用并查集将未连结的两点相连,便是最小生成树。由于费用减免只能用于一人,我们将两人之间的费用减免(-d)作为边的权值。求出最小生成树后将所有人的费用减去最大的所有的费用减免即是最小的费用。#include #include using namespace std;const int max

2016-05-27 19:36:31 316

原创 POJ3255-Roadblocks

寻找次短路。令dis[]为点到源点的最小距离,dist[]为点到终点的最小距离。由此可知dis[u] + dist[u]为从源点到终点的最短路。dis[u] + cost[u][v] + dist[v]表示源点通过uv边到终点,次短路一定是其中比最短路大比其他路小的值。因此只要求出每个点到源点的距离和每个点到终点的距离即可。#include #include #includ

2016-05-26 20:25:36 321

原创 POJ3280-Cheapest Palindrome

动态规划。dp[i][j]表示把从id[i]到id[j]改成回文串的最小代价。因此每次dp[i][j]都将从规模更小的dp[i+1][j]和dp[i][j-1]中选择最优解。通过每次迭代,dp[i+1][j]是回文串,dp[i][j-1]也是回文串。设从id[i+1]到id[j]的回文串为xxyy则从id[i]到id[j]的字符串为axxyy,这时可以将该字符串改成axxyya

2016-05-22 00:52:09 285

原创 POJ3190-Stall Reservations

先对每头牛进行从早到晚的排序。由于需要为每个牛分配牛棚并输出,维护一个数组t表示第i头牛位于哪一个牛棚。维护一个以结束时间为标准从小到大的优先队列,每次提取出最早结束的牛棚,判断是否可用,如果可用的话标记,不可用则新建一个牛棚。最后输出即可。#include #include #include using namespace std;const int MAXN = 50

2016-05-18 13:20:49 446

原创 数据结构-线段树Trie

闲来没事写了个带前缀的线段树模版。#include #include #include #include using namespace std;struct Trie{ int val; Trie *next[26];};void insert(Trie *root, string s){ Trie *p = root; for (

2016-05-17 06:47:17 312

原创 POJ2236-Wireless Network

以电脑之间的连通关系建立并查集,连接符合条件的电脑并检查连通性即可。#include #include #include using namespace std;typedef pair P;const int MAXN = 1001;int par[MAXN+5];int high[MAXN+5];bool status[MAXN+5];P com[MAXN+5];

2016-05-16 09:05:07 367

原创 大搬家

近期B厂组织了一次大搬家,所有人都要按照指示换到指定的座位上。指示的内容是坐在位置ii上的人要搬到位置jj上。现在B厂有NN个人,一对一到NN个位置上。搬家之后也是一一对应的,改变的只有位次。在第一次搬家后,度度熊由于疏忽,又要求大家按照原指示进行了一次搬家。于是,机智的它想到:再按这个指示搬一次家不就可以恢复第一次搬家的样子了。于是,B厂史无前例的进行了连续三次搬家。虽然我们都知

2016-05-13 22:48:28 313

原创 放盘子

小度熊喜欢恶作剧。今天他向来访者们提出一个恶俗的游戏。他和来访者们轮流往一个正多边形内放盘子。最后放盘子的是获胜者,会赢得失败者的一个吻。玩了两次以后,小度熊发现来访者们都知道游戏的必胜策略。现在小度熊永远是先手,他想知道他是否能获胜。注意盘子不能相交也不能和多边形相交也不能放在多边形外。就是说,盘子内的点不能在多边形外或者别的盘子内。如果盘子能够放入正多边形中,则第一次必然会放到

2016-05-11 22:02:40 421

原创 列变位法解密

列变位法是古典密码算法中变位加密的一种方法,具体过程如下 将明文字符分割成个数固定的分组(如5个一组,5即为密钥),按一组一行的次序整齐排列,最后不足一组不放置任何字符,完成后按列读取即成密文。比如:原文:123456789密钥:4变换后的矩阵:123456789xxx(最后的几个x表示无任何字符,不是空格,不是制表符,就没有任何

2016-05-11 20:45:22 2462

原创 IP聚合

子网掩码: A.B.C.DIP地址:a.b.c.d网络地址:(A&a).(B&b).(C&c).(D&d)问在固定的子网掩码下有多少个网络地址。#include #include using namespace std;struct rec{ int a, b, c, d; bool operator <(const rec &s) const

2016-05-10 22:16:28 545

原创 POJ1988-Cube Stacking

这是一题带权值的并查集问题,并在move过程中规定了x, y连边的方向,因此在优化的过程中要记下每个节点到根的相对位置,并通过路径压缩将每个节点挂在每堆的最顶上的元素(父节点)。用数组par纪录每个节点的父节点,数组far纪录每个节点到父节点的相对距离,数组stk纪录以某元素为父节点的堆的节点(方块)数。本题中的关键在于find函数通过递归方式进行的路径压缩,find函数的递归实现是本题的中心

2016-05-09 21:33:15 285

原创 POJ3616-Milking Time

首先将Bessie休息的时间纳入挤奶的时间内,按开始时间从小到大排序。然后用每个挤奶时间内的牛奶量初始化dp数组,dp[i]表示从开始到第i个时间内收益的最大值。显然dp[i] = 从0 - i 时间段内的最大收益+当前第i个时间段内收益。#include #include using namespace std;const int MAXM = 1000;struct

2016-05-04 13:51:44 267

原创 最长上升子序列长度及其个数

求最长上升子序列长度的两种方法:int a[MAXN];int dp[MAXN];int lis = 0;for (int i = 0; i < n; i++) { dp[i] = 1; for (int j = 0; j < i; j++) { if (a[j] < a[i]) dp[i] = max(dp[i], dp[j]

2016-05-04 13:00:07 1707

空空如也

空空如也

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

TA关注的人

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