- 博客(15)
- 资源 (3)
- 收藏
- 关注
原创 hdu 4497 GCD and LCM(2013 ACM-ICPC吉林通化全国邀请赛——题目重现)
质分解 + 简单计数。当时去比赛的时候太年轻了。。。这道题都没敢想。现在回过头来做了一下,发现挺简单的,当时没做这道题真是挺遗憾的。这道题就是把lcm / gcd 质分解,统计每个质因子的个数,然后就可以统计出总数了。 统计的时候假如有2个3,这样的话肯定是有一个元素是含有全部的2个3的,也肯定有一个元素没有3,于是我们就可以直接得出,统计个数为元素个数x6, 然后每个质因子分
2013-08-30 11:58:47 3672 1
原创 poj 1185 炮兵阵地
经典状态压缩dp,明显是压缩列,但是需要考虑前两行所有职能开3维矩阵了,可以先把满足的情况存入vector中,这样可以减少枚举状态。。。。#include#include#include#include#include#include#define LL long long#define CLR(a, b) memset(a, b, sizeof(a))#define SL(
2013-08-29 10:22:14 835
原创 Fuel Stops
Fuel StopsTime Limit: 20000ms, Special Time Limit:50000ms, Memory Limit:32768KBTotal submit users: 19, Accepted users: 15Problem 11344 : No special judgementProblem description
2013-08-29 09:26:39 1435
原创 UVALive 4015 Caves
树形dp,自己想了很久很久都没想起来怎么做。。。汗,真笨啊。只好看了一下别人的思路,挺巧妙的,原来树形dp的第三维这么能这么表示,看来以后要让自己的思维更加发散些才能做的出来这种题了。dp[u][l][f] ,u表示当前节点,l表示该节点能到达l个节点所走路程的最小值。当f = 1时表示不用回到当前点,f = 0表示必须回到当前点。则状态转移方程可以表示为: dp[u][j][0]
2013-08-27 18:14:44 1139
原创 UVALive 4327 Parade(hdu 2490 Parade)
单调队列优化的dp,要用到两层单调队列。。做了很久很久。。。原来用long long 运算要比用int慢上很多很多,就是因为我用的longlong 一直超时,改成int就ac了,真是无语啊。。。这题模型挺容易想的,但是数据量超大,肯定不能正常的递推,仔细想想可以发现,其实每一次递推不必用前一层所有满足情况的值去找到该层的最大值,可以用单调队列维护满足条件区间的最大值,这样就可以在O(1)的时间下获
2013-08-23 10:20:01 1540
原创 UVALive 2038 Strategic game
树形dp,求最少放多少个士兵,使得每条边都被每条路都可以被士兵侦查到。即选择最少的点,使得树上任意一条边至少有一个顶点被选中。dp[i][j], 当j = 0时,表示当点i不放士兵时最少放了多少个士兵,j = 1时,表示放士兵时最少有多少个。注意:两个相邻点都可以选择放士兵。#include#include#include#include#include#include#inclu
2013-08-20 16:10:20 991
原创 UVALive 6170 Esspe-Peasee
扩展欧几里得算法,给出a,b, c 求满足a * x + b * y = c 且 a >= 0, b >= 0, a + b 最小。注意格式问题,因为格式wa了无数遍。。。汗。。。#include#include#include#include#include#include#include#include#include#include#inclu
2013-08-20 10:20:19 1445
原创 UVALive 6163 - Myth Busters
状态压缩dp。#include#include#include#include#include#include#include#include#include#include#include#include#include#include#include#define FF(i, a, b) for(int i=a; i<b; i++)#define REP(i
2013-08-20 10:13:13 1015
原创 UVA 10817 Headmaster's Headache
状态压缩dp,但是要求的是每门功课至少有两名老师,所以状态有些复杂,可以用(1 #include#include#include#include#include#define LL long long#define CLR(a, b) memset(a, b, sizeof(a))const int N = 222;const int INF = 1e
2013-08-19 10:49:27 861
原创 UVA 10564 Paths through the Hourglass
倒着递推,dp[i][j][k] ,表示位置i,j处和为k一共有多少种方法,然后路径就可以根据dp[i][j][k],O(n)算出了。答案会超int,注意用long long。#include#include#include#include#include#define LL long long#define CLR(a, b) memset(a, b, sizeof(
2013-08-18 19:31:06 1015 1
原创 UVALive 3530 Martian Mining
Rujia Liu说这道题模型简单。。。但是我做了很久才做出来。。。@_@。。 先预处理矩阵,a矿表示为横向和的形式,b矿表示为纵向和的形式。 dp[i][j][k] : k = 0 表示i, j块为横向时表示的横向大于等于i,纵向大于j的所有块的选择和的最大值。k = 1 表示i, j块为横向时表示的横向大于i,纵向大于等于j的所有块的选择和的最大值。#include#
2013-08-18 15:32:05 983
原创 UVALive 4256 Salesmen
树形dp入门题。找出给出路径最相近路径,输出路径上不同节点个数。其实就是dfs + 记忆化。 也可用递推得出答案,个人觉得记忆化的方法容易理解和方便书写。#include#include#include#include#includeusing namespace std;const int N = 111;const int M = 11111;
2013-08-18 13:03:51 961
原创 UVA 10534 Wavio Sequence
大白书(算法竞赛入门经典训练指南)习题。 求一个最长序列,使得该序列长度为2k - 1, 前k个严格递增,后k个严格递减,求最大的k。 先正着求一遍最长上升子序列,用up[i] 表示以i点作为终点的上升序列长度。再反着求一遍最长上升子序列,用dw[i] 表示以i点作为终点的下降序列长度。然后求出最大者即可。#include#include#include#
2013-08-18 12:57:57 787
原创 UVALive 4727 Jump
大白书习题,为约瑟夫变形问题。给你n个数组成一个环,从第k个元素开始删除,每隔k个元素删一个。。。 经典的约瑟夫问题是求最后一个剩余的元素,可由递推公式 f[1] = 0, f[n] = (f[n - 1] + k) % n(下标0~~n-1,公式证明请见百度百科)得到。该题是让输出最后三个被删除的元素,其实该递推公式表示意思是:最后删除的那个元素时,有且仅有那个元素,然后一层一层递
2013-08-18 12:38:25 1258
数位计数问题解法研究
2013-10-07
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人