- 博客(15)
- 收藏
- 关注
原创 2013腾讯编程马拉松初赛第三场(3月23日)
1001 小Q系列故事——世界上最遥远的距离 Time Limit: 0.2 Seconds Memory Limit: 65536K 世界上最遥远的距离 不是生与死 而是我就站在你面前 你却不知道我爱你 世界上最遥远的距离 不是我就站在你面前你却不知道我爱你 而是明明知道彼此相爱 却不能在一起 世界上最遥远的距离 不是明明知道彼此相爱却不能在一起
2013-03-23 21:29:05
1302
原创 hdu 4465
计算组合数最大的困难在于数据的溢出,对于大于150的整数n求阶乘很容易超出double类型的范围,那么当C(n,m)中的n=200时,直接用组合公式计算基本就无望了。另外一个难点就是效率。 对于第一个数据溢出的问题,可以这样解决。因为组合数公式为: C(n,m) = n!/(m!(n-m)!) 为了避免直接计算n的阶乘,对公式两边取对数,于是得到: ln(C
2012-11-21 16:05:38
1470
原创 HDU 4442 Physical Examination
#include #include #include #define MAXSIZE 1000030 using namespace std; struct node { __int64 a,b; }P[MAXSIZE]; __int64 s,sum; bool cmp(node a,node b) { return a.a*b.b<a.b*b.a; }
2012-10-29 18:04:44
435
原创 poj3342 Party at Hali-Bula
/* 用dp[i][1]表示选择结点i时以i为跟结点的子树能得到的最大值,dp[i][0]为不选i时的最大值, 则dp[i][0]+=max(dp[j][0],dp[j][1]),dp[i][1]+=sum{dp[j][0]},其中j为i的儿子; 边界为d[k][1]=1,d[k][0]=0(k为叶子节点) 本题比较难一点的是判断解得唯一性。我的判断方法是:如果dp[i][0]>=dp[i][1]
2012-10-10 11:38:59
578
原创 poj2239 Selecting Courses(最大二分图匹配 (匈牙利算法) 实现 )
#include #include #include #include #define MAXSIZE 205 #define sf scanf #define pf printf #define __int64 long long #define INF 0xfffffff #include using namespace std; int map[MAXSIZE][MAXSIZE]; int
2012-10-04 20:16:01
593
原创 UVa 10596 - Morning Walk(欧拉回路)
/* 题目大意: Kamal每天早上都要从家里走到Chittagongand这个地方。 从家里到Chittagongand有很多条路, 他每天早上都要先选择好一条路线, 这条路线从家里走到Chittagongand,在从Chittagongand走回家里。 这条路线不能重复地经过同一条路。 两个地点间可能会有多条路。 比如多次出现了从A到B的路线, 那么表示每次出现的都是不同的路 */ #i
2012-10-04 20:01:48
1667
原创 hdu4283 You Are the One(区间DP)
#include #include #include #include #define MAXSIZE 105000 #define sf scanf #define pf printf #define __int64 long long #define INF 0xfffffff using namespace std; int dp[205][205],x[205],s[205]; void
2012-10-03 13:17:39
418
原创 poj1461 Shredding Company(DFS)
/* 题目大意: 给定一个目标数target 和一个小于等于6位的数字number,把数字切开后相加。 eg: number=123456; 切法1: 12-34-56 (sum=12+34+56=112) 切法2: 123-456 (sum=123+456=579)等等. 要求输出唯一一个小于等于目标数(条件!!)的切法方案; 如果无可行的切法,输出额error; 如果最优解的切法不唯一输
2012-10-03 00:10:57
674
原创 NOI 警位安排(树形DP)
/* 【题目描述】 一个重要的基地被分成了n个连通的区域,出于某种原因,这个基地以某一个区域为核心,呈一树形分布。 在每个区域里安排警卫的费用是不同的,而每个区域的警卫都可以望见其相邻的区域。如果一个区域有警卫或是被相邻区域的警卫望见,那它就是安全的,你的任务是:在确保所有的区域安全的状态下,使总费用最小。 【输入格式】 第一行n,表示树中结点的数目。 接
2012-10-02 08:53:08
2666
原创 poj 3140 Contestants Division
/* 题意:给出一棵树,每个节点有一个权值,要求去掉一条边所能获得的两棵树的最小的权值差 DFS遍历一遍,枚举断点,(简单题) */ #include #include #include #include #define MAXSIZE 105000 #define sf scanf #define pf printf #define __int64 long long #define INF
2012-10-01 12:26:51
448
原创 poj 1947 Rebuilding Roads(树形DP)
/* 问题描述:给定n个点的树,最少删多少边,会有棵p个节点的树 dp[i][j]代表以i为根(包含i),共j个节点需要切断的路的数量 dp[i][j+k]=min(f[i][j+k],f[i.son[t]][k])(t为i的孩子) 树形DP+背包 */ #include #include #include #include #define MAXSIZE 505000 #define sf
2012-10-01 11:19:45
555
原创 poj 3709 K-Anonymous Sequence(斜率优化DP)
/* s[i]->前I个数之和; 朴素方程:dp[i]=min(dp[j]+s[i]-s[j]-(i-j)*a[j+1]); 假设I>J>K,且在K点的决策比J好,则有 dp[j]+sum[i]-s[j]-(i-j)*a[j+1]>= dp[k]+s[i]-s[k]-(i-k)*a[k+1] 化简得: dp[j]-dp[k]-s[j]+s[k]+j*a[j+1]-k*a[k+1]>=i*
2012-09-30 22:45:39
1368
原创 hdu 4258 Covered Walkway(斜率优化DP)
/* 朴素方程:dp[i]=min{dp[j]+c+(p[i]-p[j+1])^2} 我们考虑在计算dp[i]时,对于i < j < k来说, 如果保证决策j比决策k大的条件是: dp[j]+(s[i]-s[j+1])*(s[i]-s[j+1])+C<dp[k]+(s[i]-s[k+1])*(s[i]-s[k+1])+C 通过移项整理,可以化简为: (dp[j]-dp[k]+s[j+1]*s[
2012-09-30 20:10:57
475
原创 poj2018 Best Cow Fences
#include #include #include #define MAXSIZE 100500 #define sf scanf #define pf printf using namespace std; int N,F; int sum[MAXSIZE],t[MAXSIZE]; int stack[MAXSIZE],top,back; long long Xmult(int i,int j
2012-09-29 23:39:15
848
原创 poj 1180 Batch Scheduling ( 斜率优化DP )
/* N个任务排成一个序列在一台机器上等待完成(顺序不得改变),这N个任务被分成若干批,每批包含相邻的若干任务。 从时刻0开始,这些任务被分批加工,第i个任务单独完成所需的时间是Ti。在每批任务开始前,机器需要启动时间S, 而完成这批任务所需的时间是各个任务需 要时间的总和(同一批任务将在同一时刻完成)。 每个任务的费用是它的完成时刻乘以一个费用系数Fi。请确定一个分组方案,使得总费用最小。(
2012-09-29 14:09:11
644
空空如也
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人