2012年6月29日

POJ3629 2436(CUHK summer training on 28 JUN 2012)(队列、二进制)

摘要: AB水过。C:POJ3629 打牌模拟题。K张牌中有N张好牌,每次发牌前将前P张放在最底,如何安排牌的位置使每次某人拿到的牌都是好牌。 用数组自编一个queue可以AC,然而使用C++ vector 或者 queue 都会造成TLE。可见用数组模拟速度快不少。D:POJ2436 有N头牛,有D种疾病,每头牛都含某几种、或者不含病。现将这些牛的牛奶混合在一起,且牛奶中的病毒种类不超过K种,问最多 能取几头牛的牛奶? 思路:将每头牛的含病情况用二进制表示,例如若有三种病,且含第一二种病,则用110表示,若是含第二种病,则用010表示。然后用另一个二进制数表示K种病毒,用next_perm... 阅读全文

posted @ 2012-06-29 23:07 bobchou 阅读(279) 评论(0) 推荐(1) 编辑

2012年6月28日

POJ3781-3786(Unknown Summer Training ID 8911 0x03 on hust oj)(枚举、贪心、动态规划)

摘要: 一共9道题,完成前6道。A: 问题:输入10个数,输出10个数中第3大的数。 STL sort函数水过。B: 问题:输入n个数字,将这些数字分成若干组,使每组数字的和相同,只有连续的数字才能被分在同一组。给出一种分法使每组数字的和最小,输出该最小值。 思路:枚举 + 贪心。至多循环n次。第i次循环: 将第i个数加入第一组,之后判断后续的数是否能按第一组的和分组。若能,则输出该和的值,并终止循环;若不能,立即跳入下一个循环。C: 问题:有n层楼,测试玻璃球在几楼落下刚好破碎。现有m个玻璃球,给出一个测试方案使测试必然成功,且测试的次数最少,输出该最少值。 思路:动态规划。dp[n][... 阅读全文

posted @ 2012-06-28 00:04 bobchou 阅读(200) 评论(0) 推荐(0) 编辑

2012年6月27日

POJ2718(枚举 + 贪心)

摘要: 问题: 有N个0到9的数字,互不重复。用这些数字组成2个整数,每个数字只能用一次,且必须用尽所有数字,且0不能在第一位(除非组成的整数是0)。求组成整数的差的最小值。思路: 可以将所有情况分为两类: (1)N是偶数:可以将这N个数字平分,使每个整数含N/2个数字。要使差最小,只需使两个整数最高有效位的差最小,然后使用贪心算法使次高有效位及以后的位数的差 最大。这里使两个整数最高有效位的差最小的做法可能有多种,因此要枚举每种做法,取出最后结果值最小的那一个。 (2)N是奇数:将N个数字中除0外的最小数字分配给其中一个整数,作为最高有效位。然后将剩余的数字平... 阅读全文

posted @ 2012-06-27 15:30 bobchou 阅读(267) 评论(0) 推荐(0) 编辑

2012年6月26日

POJ1176 (规律循环)

摘要: 问题: 有N个开着的灯,和控制这个N个灯的四个开关。四个开关作用不同。第一个开关:flip所有的灯。第二个开关:flip奇数编号的灯。第三个开关:flip偶数编号的灯。第四个开关:flip编号为3 * K + 1 的灯,其中K = 0,1,2....。已知在C次操作后其中几个灯的状态,给出所有灯在这C次操作后所有可能的状态。方法: 通过观察可以发现,这些灯一共可以分成4种,同种灯无论在何种操作下,状态都是相同的。即:(1)编号为1,7,13,19....的灯。(2)编号为4,10,16,22....的灯。(3)编号为奇数,但是不属于(1)的灯。 (4)编号为偶数,但是不属于(2)的灯。 ... 阅读全文

posted @ 2012-06-26 15:57 bobchou 阅读(405) 评论(0) 推荐(0) 编辑

2012年6月24日

POJ1256 (C++ compare函数)

摘要: 问题: 有一个只含大小写字母的字符串,给出所有该字符串的排列,以字典顺序输出。其中'A'<'a'<'B'<'b'<...<'Z'<'z'。方法: 只需调用C++ STL中 next_permutation() 和 sort() 函数,重点在于编写自定义的compare() 函数。hint:(compare 函数的编写方法)bool cmp(int a, int b){ a = ....; // 处理a b = ....; // 处理b return (condit 阅读全文

posted @ 2012-06-24 12:08 bobchou 阅读(1036) 评论(0) 推荐(0) 编辑

2012年6月23日

POJ2153 (C++ map)

摘要: 问题: 存在N个学生,并有M次考试,分别计算每次考试后某个人的综合排名。方法: 声明一个从 string 到 int 的map类,其中 string 对应名字, int 对应分数。hint: 可将该 map 类看做以 string 为 index 的数组。 阅读全文

posted @ 2012-06-23 21:28 bobchou 阅读(120) 评论(0) 推荐(0) 编辑

2012年6月22日

POJ2560 Prim

摘要: 问题: 存在n个点,已知这些点的坐标,求出这些点的最小生成树(minimal spanning tree)的权重。算法: Prim:1.任选一个点,加入树中,作为第一个树中的点。 2.取距离现有树距离最小的点,加入树中。 3.重复步骤2, 直至所有点都加入到树中。 注意点:1.已处理点与未处理点的表示与转换。代码: #include<iostream>#include<cmath>#include<algorithm>#include<cstdio>#include<cfloat>#include<vector>using 阅读全文

posted @ 2012-06-22 20:16 bobchou 阅读(214) 评论(0) 推荐(0) 编辑

2012年6月21日

POJ1065 1548

摘要: 1065问题: 现有n个点(x1, y1), (x2, y2),(x3, y3)... (xn,yn)。生成m个序列,每个序列x,y均以增序排列。问m的最小值为多少。解法: 贪心算法:1.将所有点按x排序,x相同的,按y排序。 2.贪心组序列。1546问题: 有25 * 25的矩阵,其中分布着点,问串连几遍能历遍所有点,串连方向只能往右或下。实质: 已排序的1065。代码: #include<iostream>using namespace std;int map[25][25];int main(){ int x, y; while(cin >> x >> 阅读全文

posted @ 2012-06-21 22:52 bobchou 阅读(110) 评论(0) 推荐(0) 编辑

导航