- 博客(21)
- 收藏
- 关注
原创 POJ 2063 Investment(完全背包问题)
投资债券,给出初始资金,固定的年限,债券的面值及每年的收益,每种债券可以无限买,求在给定年限内的最大收益 完全背包问题,需要注意的是收益是利滚利,要每年算一次,把每年的收益再作为本金投资。 Source Code: #include #include using namespace std; const int maxn = 20; const int maxm = 2000
2015-03-16 11:11:06 458
原创 POJ 3624 Charm Bracelet (0-1背包问题)
赤裸裸的0-1背包,用二维数组空间会溢出,优化成一维 Source Code: #include #include #include using namespace std; const int maxm = 12880; const int maxn = 3500; int c[maxm]; int w[maxn]; int d[maxn]; int M, N; vo
2015-03-15 23:05:43 328
原创 HDU 2444 The Accomodation of Students (二分图判定、求最大匹配)
题意: 一群人,有的两人之间认识,有的不认识,认识关系不存在传递性(A 认识 B,B 认识 C ≠ A 认识 C ) 给定哪几个人相互认识,问是否能把这群人分成两组,使得不同组的人之间两两都不认识。 如果可行,安排两个认识的人一组住一个房间,问最多能有多少组人能住同一个房间。 分析: 第一步,判断能否分成两组,即判定所给图是否是二分图, 染色法:选定一个起点,把该点染成黑色,以
2015-03-14 23:04:48 401
原创 HDU 1528 Card Game Cheater (二分图求最大匹配)
题意: Adam 和 Eve,每人抽 n ( n 假设Eve作弊(知道双方牌的信息),给出双方所抽牌的信息,求如果Eve采用最优策略能得多少分。 牌的比较规则: 首先比较两张牌的数值,数值大的牌就大,不用继续比较,如果数值相同则进行 2.数值相同的情况下比较花色,大小顺序依次是 红桃 > 黑桃 > 梅花 > 方片。 构图: Adam 和 Eve 的每张牌都看作一个点,两者
2015-03-14 18:30:31 390
原创 POJ 2536 Gopher II (二分图求最大匹配)
题意: 老鹰来抓老鼠,老鼠开始逃跑,老鼠移动速度为 v,老鼠必须在 s 时间内跑进洞里,否则就会被抓到。 给出所有老鼠的坐标、老鼠洞的坐标、老鼠的移动速度 v、老鼠跑进洞里的限定时间 s,输出最少有多少只老鼠被抓到。 构图: 分别计算每只老鼠跑到每个老鼠洞需要的时间,如果在限定时间内能跑到,则当前老鼠和老鼠洞之间有路径,否则没有。 老鼠、老鼠洞以及他们之间的路径构成一个二分图,转化成求该
2015-03-12 08:25:38 303
原创 POJ 1144 Network 求割点(tarjan)
求割点 Code: #include #include #include #include using namespace std; const int maxn = 100 + 5; int ind; int root; int low[maxn]; int dfs[maxn]; bool vis[maxn]; bool flag[maxn]; vector mp[maxn]
2015-03-11 23:55:36 231
原创 POJ 3041 Asteroids 最小点覆盖
每一行看成一个点,设为集合A;每一列看成一点,设为集合B 把输入的点的坐标转化成集合A到集合B的点的连线, 转化成求A、B构成的二分图的最小点覆盖,最小点覆盖数 = 最大匹配数 匈牙利算法 Code: #include #include #include using namespace std; const int maxn = 500 + 5; int mp[max
2015-03-11 18:12:37 178
原创 POJ 1273 Drainage Ditches
Code: #include #include #include #include using namespace std; const int maxn = 200 + 10; const int INF = 99999999; queue apath; int cap[maxn][maxn]; int flow[maxn][maxn]; int augPath[maxn];
2015-03-08 17:43:37 277
原创 POJ 3259 Wormholes 最短路径(Bellman Ford)
Code: #include #include #include using namespace std; const int maxm = 2500 * 2 + 200 + 10; const int maxn = 500 + 10; const int INF = 999999; struct Edge { int s; int e; int weight
2015-03-06 19:38:06 208
原创 POJ 2231 Moo Volume
先贴个代码 #include #include #include using namespace std; const int maxn = 10000 + 10; __int64 num[maxn]; int main() { int n; while( ~scanf( "%d", &n ) ) { for( int i = 0; i <
2015-03-02 23:37:29 252
原创 POJ 1978 Hanafuda Shuffle
一叠卡片从上到下编号一次为 n, n-1, ..., 3, 2, 1,每次从这一叠卡片中抽出若干张放到最上面(如图),经过若干次这样的操作后,问最顶层的卡片的编号是多少。 直接用静态链表来模拟移动的操作然后输出表头元素。 Code: #include #include using namespace std; const int maxn = 55; struct node
2015-03-02 22:37:41 287
原创 POJ 1922 Ride to School
题目描述: Charley想要从起点到达终点,路程是4.5km,这一过程必须和另外一个人同行,假设有n个人要走这段路程,他们分别在不同的时间出发,匀速行驶。在同行的过程中如果有人从旁边经过,Charley 就会跟速度较快的那个人同行,求到达终点所需的最短时间。 算法分析: 以n个人中第一个出发的那个为原点,出发时间为0,其他人的出发时间都以第一个出发的人为参照物,由于是和第一
2015-03-02 22:36:08 304
原创 POJ 1657 Distance on Chessboard
题目描述: 在国际象棋棋盘上给出起点 a 和终点 b,分别求出 王、后、车、象 四种棋子从 a 到 b 所需要的步数; 王、后、车、象的走法: 王:八个方向都可以走,每步只能走一格; 后:八个方向都可以走,每步没有格数限制;
2015-03-02 22:32:34 294
原创 POJ 1007 DNA Sorting
字母序列的逆序数:对序列里的每一个字符,按照字典序的顺序,当前字母后面比它小的字母个数为该字母的逆序数,所有字母的逆序只和为字母序列的逆序数。 给出若干段等长的DNA序列,把给出的DNA序列按照逆序数由小到大的顺序排列输出,如果两段序列的逆序数相同则按输入时的顺序输出。 Code: #include #include #include using namespace std
2015-03-02 22:31:28 314
原创 POJ 1656 Counting Black
100 * 100 格子的白板,左上角坐标为(1, 1),右下角坐标为(100, 100) 对这个白板有3种操作: WHITE x y L ---- 把左上角坐标为( x, y ),边长为L的区域涂成白色 BLACK x y L ---- 把左上角坐标为( x, y ),边长为L的区域涂成黑色 TEST x y L ---- 统计左上角坐标为( x, y ),边长为L的区域中黑色块的数
2015-03-02 22:30:09 220
原创 POJ 1068 Parencodings
题目描述: 给出一个括号序列,规定一下两种编码形式: 1)P-sequence:P = p1 p2 ... pn,其中pi表示第i个右括号左边的左括号个数; 2)W-sequence:W = w1 w2 ... wn,其中wi表示在第i个右括号和与之相匹配的左括号之间的右括号个数(包括第i个右括号) 示例如下: 括号序列S: ( ( (
2015-03-02 22:20:35 232
原创 POJ 1005 I Think I Need a Houseboat
题目描述: 一块地(可以等效成一个点),坐标为( x, y ),在原点( 0, 0 )处有一以原点为圆心的半圆形水域,该水域每年会延半圆的弧形方向向外均匀扩散50平方公里,问这块地会在几年内被水域吞没。 算法描述: 设这块地会在n年内被吞没,吞没时半圆形水域的半径为r 根据面积公式:50 * n = 1/2 ( π * r ^ 2 ) 根据坐标:r
2015-03-02 22:16:32 210
原创 POJ 1003 Hangover
题目描述: 假设有n块长度为1的木板重叠放在桌子边缘,最上面一块木板最多有1/2悬空,第二块为1/3,以此类推,第n块最多有1/n悬空,给出木板悬空的总长度,求需要用到的木板的最小数目。 算法分析: 设总长度为 length, 需要的最少木板数为 n, 根据题意,满足不等式 length Code: #include #include
2015-03-02 22:06:00 340
原创 POJ 1002 487-3279
把每行输入的字符串转换成电话号码的格式按照字典序对转换后的字符串进行排序 从头到尾遍历每个字符串统计每个字符串重复的次数并按要求输出 #include #include #include #include using namespace std; const int maxn = 100000 + 10; string tel[maxn]; char trans( char a ) {
2015-03-02 22:03:51 234
原创 POJ 1001 Exponentiation (Java高精度)
给出一个浮点数 R 和一个整数 n ,求 R 的 n 次方,结果以"0."开始的要舍掉"0" R 和 n 的范围是: 0.0 0 因此结果的范围为 [ 0, 99.999^25 ],显然直接用浮点数型运算会溢出,需要用到大数运算,也可以用Java的大数类直接计算,后者代码比较简单,但效率要比C/C++大数算法低得多。 Code: import java.util
2015-03-02 21:53:10 254
原创 中国剩余定理 ( POJ 1006 )
POJ 1006题解 题目描述: 人的体力、情感、智力的峰值分别每隔23、28、33天出现一次,给出p、e、i分别代表上次体力、情感、智力的峰值出现的时间,d表示当前时间,给出的变量的值都是相对于0天来说的,求距离下次三个峰值在同一天出现还要多少天 题目分析: 根据题意,三个峰值同时出现的时间距离任意一个峰值上次出现的时间一定是该峰值出现的周期的整数倍,令a, b, c分别
2015-03-02 21:13:58 387
空空如也
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人