上一页 1 ··· 14 15 16 17 18 19 20 21 22 ··· 66 下一页
摘要: 题意:德黑兰的一家每天24小时营业的超市,需要一批出纳员来满足它的需求。超市经理雇佣你来帮他解决一个问题————超市在每天的不同时段需要不同数目的出纳员(例如,午夜只需一小批,而下午则需要很多)来为顾客提供优质服务,他希望雇佣最少数目的纳员。超市经历已经提供一天里每一小时需要出纳员的最少数量————R(0),R(1),...,R(23)。R(0)表示从午夜到凌晨1:00所需要出纳员的最少数目;R(1)表示凌晨1:00到2:00之间需要的;等等。每一天,这些数据都是相同的。有N人申请这项工作,每个申请者i在每天24小时当中,从一个特定的时刻开始连续工作恰好8小时。定义ti(0<=ti< 阅读全文
posted @ 2013-03-15 18:28 沐阳 阅读(578) 评论(0) 推荐(0) 编辑
摘要: 题意:和上一题比较像,不过这里不是根据已知的约束求出另外一个约束,而是判定是否存在解。给定一个区间的和值区间,问整个区间能否满足所有的要求。解法:虚拟一个超级源点,超级源点到点i的最短路表示到第i个数时总和为dis[i],为了保证每个点能够被计算到,那么需要从超级源点连一条没有什么影响的边出来。然后对整个图求一次spfa,观察是否存在负环。代码如下:#include <cstdlib>#include <cstdio>#include <cstring>#include <iostream>#include <algorithm>us 阅读全文
posted @ 2013-03-14 15:20 沐阳 阅读(210) 评论(0) 推荐(0) 编辑
摘要: 题意:给定若干个连续的整数区间[ai, bi]以及ci,现在要求这样一个集合Z,集合Z中的元素与每个给定的区间的元素交集至少有ci个。解法:通过把dis[i]看做Z中小于等于整数i一共有多少个元素。那么对于题目给定条件有表达式dis[b] - dis[a-1] >= ci,根据这个不等式就能够进行构边了。除此之外,还有一些隐含的条件:0 <= dis[i]-dis[i-1] <= 1,对这些关系同样进行构边。然后要求的值就是dis[Max] - dis[Min-1] >= M中的M,其中Max和Min是出现的最小左、右边界,令dis[Max] = 0,那么就是求解的就是 阅读全文
posted @ 2013-03-13 15:30 沐阳 阅读(338) 评论(0) 推荐(0) 编辑
摘要: A.素数矩阵题意:给定一个矩阵,每次能够给矩阵中的元素加1或者是减1,问使得矩阵的某一行或者某一列满足所有元素都为素数的最少操作是多少次(没加1或者减1视作一次操作)。解法:先把给定数字域内的素数全部筛选出来,记得稍微超过最大数,因为可能是变成一个超过最大数的素数,然后就是求出每一个数变成相邻素数的最小代价,统计出某一行或者是某一列的综合即可。代码如下:Problem A#include <iostream>#include <cstdio>#include <cstring>#include <cmath>#include <cstdli 阅读全文
posted @ 2013-03-12 21:08 沐阳 阅读(272) 评论(0) 推荐(0) 编辑
摘要: 题意:告诉我们一系列的不等式,当然这些不等式都是两个变量之间的差值,而非和值。刘备拥有N个军营,每个军营都有一个人数的上限,现在陆逊的探子来报刘备的[a, b]军营总人数不低过某一个值,现在问根据这些答案陆逊是否能够正确推断出刘备至少在各营一共驻扎了多少部队,如果不能推出,输出“Bad Estimations”。分析:根据给定的条件,我们设sum[i]表示刘备前i个军营一共驻扎了多少人,那么每个军营至多有多少人就能够通过不等式列出来。假设一共有三个军营,上限分别为A,B,C,那么有:0 <= sum[1] - sum[0] <= A0 <= sum[2] - sum[1] & 阅读全文
posted @ 2013-03-12 20:49 沐阳 阅读(219) 评论(0) 推荐(0) 编辑
摘要: D.求体积题意:给定一个从中间挖去了一个圆柱(上下面是球的弧面)的球,告诉了剩下圆柱的高(可以看做是球剩下的高度),求球的体积是多少。解法:由于只给定了高度,所以存在不同半径的球都能够达到这个高度的要求,所以假设一个极端情况,那就是球的直径刚好等于已知的H,那么中间的圆柱就不用挖去了,所以剩下的就是球的体积。可惜还是不能够证明出为什么会这样。代码如下:Problem D#include <cstdlib>#include <iostream>#include <cmath>#include <iostream>#include <cstdi 阅读全文
posted @ 2013-03-11 20:48 沐阳 阅读(349) 评论(0) 推荐(0) 编辑
摘要: 题意:给定一个图,求出两点之间的最短路,但是这个最短路是在一条路径上的某条最贵的边能够忽略的情况下的最小值。分析:直接求出一条最短路再减去这条最短路中的最大值的做法是错误的。例如:如果A-B存在一条(2, 2, 2, 2, 2)的总长为10的路,减去最大值之后是8,存在另外一条路径(1, 8, 2),总长为11,但是减去最大的8之后就是3了,因此这里要用到动态规划来解。设dp[0][i][j]表示从i到j不使用免费权的最短路径,dp[1][i][j]表示使用免费权的最短路径,则有动态方程:dp[1][i][j] = min(dp[0][i][k] + dp[1][k][j], dp[1][i] 阅读全文
posted @ 2013-03-10 09:48 沐阳 阅读(618) 评论(0) 推荐(0) 编辑
摘要: 题意:给定一个网络,每条线路都同时有几个公式拥有,现在问某两点之间哪些公司通过自己拥有的路径单独联通。分析:问题开起来是给定了多个图,对他们分别求一个连通性,但是这里把多个图压缩到一个int型数字内,因为这里只是简简单单求一个连通性,使用位运算非常高效。代码如下:#include <iostream>#include <cstdlib>#include <cstdio>#include <cstring>using namespace std;int G[205][205];int N;void floyd() { for (int k = 1; 阅读全文
posted @ 2013-03-09 20:48 沐阳 阅读(228) 评论(0) 推荐(0) 编辑
摘要: 题意:从若干个S点出发到达T点,稍有不同的是,要区分该点落脚有左脚和右脚两种情况。解法:从题目中给定的S出发,左脚和右脚都可以踏上去,全部入队列后再spfa即可。做了这题发现使用spfa来处理多源点时连超级源点都不用建立了。代码如下:#include <iostream>#include <cstring>#include <cstdlib>#include <cstdio>#include <queue>using namespace std;const int INF = 0x3f3f3f3f;int N, M, dis[2][6 阅读全文
posted @ 2013-03-09 13:34 沐阳 阅读(301) 评论(0) 推荐(0) 编辑
摘要: 题意:给定同一个图上的两种路径,求出从某点出发到另一点的路径长度来回长度之比最大的情况。该题对两套图的处理让代码十分恶心,而且最后还要输出路径。计算出最优值最后在计算一次路径,幸好没有要求在相同的情况下按照字典序最小输出。代码如下:#include <iostream>#include <cstdlib>#include <cstring>#include <cstdio>#include <queue>using namespace std;const int INF = 0x3f3f3f3f;int N, M, K;struct 阅读全文
posted @ 2013-03-08 22:16 沐阳 阅读(304) 评论(0) 推荐(0) 编辑
上一页 1 ··· 14 15 16 17 18 19 20 21 22 ··· 66 下一页