随笔分类 -  挑战程序设计竞赛

1

RMQ小结
摘要:RMQ——区间最小查询,实际情况往往不是查询最小值,而是查询区间特定信息。一般要求在logn的级别实现查询or修改。RMQ三种实现1.BITBIT给我的感觉就是神迹一般数学的巧合,关于它的原理就不作解释了。BIT的实现十分简单,但是要支持高级的功能的话,思考的复杂度会很高。2.线段树思考比较直观,顶... 阅读全文

posted @ 2015-05-14 18:00 杰斯特丹第 阅读(176) 评论(0) 推荐(0)

poj 3685
摘要:/* 给定n,有n*n个数,有aij=i * i + m * i + j * j - m * j + i * j n =n*n-m+1个数字>=val了 看了题一下子就有想法了,结果却wa了一天...原因在于自作聪明地进行数学推论然后非要从同行中进行二分...最后才发现不满足递减... 阅读全文

posted @ 2014-11-05 21:12 杰斯特丹第 阅读(413) 评论(0) 推荐(0)

poj 3579
摘要:/* 描述: 给定n个数字,求所有两两数字之差的绝对值的中位数。 可知,共有n*(n-1)/2=m个数字。 解析: 因为满足性质——假如对key可以找出>m/2个数字>=key,那么对于任意key', 有 key' key'亦满足... 阅读全文

posted @ 2014-11-05 08:45 杰斯特丹第 阅读(361) 评论(0) 推荐(0)

poj 3045
摘要:/* 题意: 给定n,然后是n头牛,每头牛有一个重量w,力量s 要求把n头牛一个叠在一个头上,类似叠罗汉 对于一个叠罗汉的序列,每头牛的risk是它顶上的牛的重量之和减去它的s 对于序列的最大的risk就是这个序列的risk ... 阅读全文

posted @ 2014-11-02 10:51 杰斯特丹第 阅读(386) 评论(0) 推荐(0)

poj 3104
摘要:/* 题意: 有n个衣服,每个衣服都有一个数值a[i],代表它的含水量。 你要把所有衣服晾干,有两种方法: 1.自然晾晒,每秒少1水 2.风干机,每秒少k水,不足k则变为0,但是同一时间只可以风干一件衣服。 ... 阅读全文

posted @ 2014-11-01 15:27 杰斯特丹第 阅读(260) 评论(0) 推荐(0)

poj 3273
摘要:/* 题意:给定n,m,然后n个数字,要求一个最小的lim 使得这连续n个数字可以被分为连续的m个集合,每个集合的和都不大于Lim/*#include #include #define range(i,a,b) for (int i=a;ival) return 0; ... 阅读全文

posted @ 2014-10-30 20:05 杰斯特丹第 阅读(193) 评论(0) 推荐(0)

poj 3258
摘要:/* 题意:从一个河岸跳到另外一个河岸,两个河岸之间的距离为l,中间有n个石头,每次只能从河岸和石头或者石头和石头之间跳跃,求去除最多m个石头,使得跳跃的最小距离最大。 要注意,m是可以为0的,n也一样。*/#include #include #include #define range(i,a... 阅读全文

posted @ 2014-10-30 19:47 杰斯特丹第 阅读(269) 评论(0) 推荐(0)

poj 2456
摘要:/* 题意:有n个牛棚,给出他们的位置,有m头牛,安排一种方案,使得相邻牛之间最小距离最大。*/#include #include #include #define range(i,a,b) for (int i=a;i=val) { last = c; ... 阅读全文

posted @ 2014-10-30 19:13 杰斯特丹第 阅读(183) 评论(0) 推荐(0)

二分法小结
摘要:1.lower_bound 查找序列中满足a[i]>=k的i的最小值。 即——将k插入到i位置上,保证仍然满足序列升序,i最小。 假如k比所有都小,则i=1,否则返回n+1 int *Lower_bound(int *l,int *r,int k){ //[l,r)为答案区间 /... 阅读全文

posted @ 2014-10-30 15:25 杰斯特丹第 阅读(186) 评论(0) 推荐(0)

GCJ——Crazy Rows (2009 Round 2 A)
摘要:题意: 给定一个N*N的矩阵,由0,1组成,只允许交换相邻的两行,把矩阵转化为下三角矩阵(对角线上方全是0),最少需要多少次交换?(保证可以转化为下三角矩阵)Large: N<=40解析: 假如每一行的1的个数都是不相同的,即,最终答案中的矩阵是唯一的,这就相当于求对给定数组冒泡排序需要几次交... 阅读全文

posted @ 2014-10-20 15:39 杰斯特丹第 阅读(394) 评论(0) 推荐(0)

GCJ——Minimum Scalar Product(2008 Round1 AA)
摘要:题意: 给定两组各n个数,可任意调整同一组数之中数字的顺序,求 sum xi*yi i=1..n的最小值。Small: n2时: 假设最优解中,存在 ya,yb,有b>a且ya>yb(不是按照降序排列的),显然根据n=2,交换他们的位置,就会得到更小的答案。所以,假设正确。 另外,还有很重要的... 阅读全文

posted @ 2014-10-20 15:03 杰斯特丹第 阅读(177) 评论(0) 推荐(0)

3.4 熟练掌握动态规划——状态压缩DP
摘要:从旅行商问题说起—— 给定一个图,n个节点(n>(v-1) & 1))//如果这个点还没有走过 { int val=DP(v,S | (1<<(v-1))); if (val!=INF) { dp[K][S]=min(dp[K][S],val+dist); } } } r... 阅读全文

posted @ 2014-09-26 16:18 杰斯特丹第 阅读(219) 评论(0) 推荐(0)

Poj 1742 Coins
摘要:题意: 给定N个面值,a1..an,每种面值都有c1..cn个,问从1..m的面值中,有多少个可以用已经给定的面值组成?分析: 还记得“多重组合数”问题么? DP[K][N]——用前N种数字组成K,第N种可以剩下最多多少个。 证明分析就不给出了,见前面的博文吧。时间复杂度为K*N这道题... 阅读全文

posted @ 2014-09-26 14:24 杰斯特丹第 阅读(122) 评论(0) 推荐(0)

第三章 poj 1064——关于带精度的二分法
摘要:/* 题意:给定n个实数l[i],给定一个k 问:求最大的ans,使得sum l[i]/ans i=1 to n >=k,且ans最大*/#include #include #include #define range(i,a,b) for (int i=a;ib ? a : b;}bool c... 阅读全文

posted @ 2014-09-15 09:40 杰斯特丹第 阅读(225) 评论(0) 推荐(0)

前两章总结
摘要:第一章: 1.时间估算。 2.“抽签”优化 3.Ants Poj 1852的思考过程第二章: 1.next_permutation函数 2.栈内存和堆内存——关于内存抽象。 * 3.Best Cow Line Poj 3617 * 4.霍夫曼编码 5.01背包的空间优化 6.memse... 阅读全文

posted @ 2014-09-10 10:49 杰斯特丹第 阅读(140) 评论(0) 推荐(0)

多重部分和问题
摘要:描述: N种不同数字ai每种mi个,判断是否可以选择若干个使得和为K N=ai) { if (Dp[i-1][k]) { //上一个已经可以构成 ... 阅读全文

posted @ 2014-09-01 20:04 杰斯特丹第 阅读(180) 评论(0) 推荐(0)

next_permutation函数
摘要:头文件: algorithm参数: next_permutation(first,last) next_permutation(first,last,cmp)first,last为两个iterator,分别指向目标的头和尾,cmp是一个bool函数,接受两个目标序列值,返回boolne... 阅读全文

posted @ 2014-09-01 19:30 杰斯特丹第 阅读(227) 评论(0) 推荐(0)

poj 1852 Ants
摘要:poj 1852 Ants 描述: n只蚂蚁以每秒一米的速度在杆子上爬行,到了端点的时候就会掉落,两只蚂蚁相遇的时候就会反向各自爬去,对于每只蚂蚁给出它距离左端的位置,但是不知道当前的朝向,请计算出使得所有蚂蚁都掉下所需要的最短和最长的时间。 分析: 首先,对于最短时间,显然每... 阅读全文

posted @ 2014-09-01 18:24 杰斯特丹第 阅读(167) 评论(0) 推荐(0)

关于运行时间
摘要:1000ms内可以进行的计算量。1000*10000——勉强。10000*10000——循环体内进行四次加减运算就会超时。 阅读全文

posted @ 2014-09-01 18:22 杰斯特丹第 阅读(142) 评论(0) 推荐(0)

一道简单题目的优化过程——抽签问题
摘要:题目来源:挑战程序设计竞赛题目描述: 给定n个数字,选择四次,可以选择已经选择过的数字,问是否可以选出和为m的四个数。首先,最基本的做法: 枚举四层,每一层枚举出一个数,求出所有四个数字不同的排列。时间复杂度为O(N^4)。 for (int i1=1;i1<=n;i++) for (int... 阅读全文

posted @ 2014-08-01 17:12 杰斯特丹第 阅读(207) 评论(0) 推荐(0)

1

导航