
算法竞赛入门经典
文章平均质量分 51
编码思考
这个作者很懒,什么都没留下…
展开
-
[算法入门经典] 8.1.3 分治法 求最大连续和
这个问题看了好久,原创 2014-06-05 16:52:46 · 1756 阅读 · 0 评论 -
UVA 12325 - Zombie's Treasure Chest
紫书P210 例题7-11。 此题分3种情况讨论: 1、S1很小,S2很大 直接枚举宝物2的个数0~N/S2。 2、S1很大,S2很小 直接枚举宝物1的个数0~N/S1。 3、S1很小,S2很小 当两种宝物体积相同时,比较S2*V1与S1*V2的大小,如果前者大,那应该优先拿前者。由此可得后者最多拿S1-1个。反之,前者最多拿S2-1个。#include <stdio.h>#incl原创 2015-06-01 20:47:16 · 666 阅读 · 0 评论 -
UVA 12627 - Erratic Expansion
一个红球可以分裂为3个红球和一个蓝球。 一个蓝球可以分裂为4个蓝球。分裂过程下图所示: 设当前状态为k1,下一状态为k2。 k1的第x行红球个数 * 2 ⇒ k2第2*x行的红球个数。 k1的第x行红球个数 ⇒ k2第2*x+1行的红球个数。特殊处理一下上下边界,递归求解就可以搞定了。#include <stdio.h>#include <string.h>#include <math.原创 2015-06-29 14:13:11 · 1145 阅读 · 0 评论 -
UVA 1149 - Bin Packing
贪心思想,排序后左右用两个变量从中间操作即可。#include <stdio.h>#include <string.h>#include <math.h>#include <stdlib.h>#include <algorithm>#include <ctype.h>#include <iostream>#include <set>#include <map>#include <q原创 2015-06-29 20:25:07 · 725 阅读 · 0 评论 -
[算法竞赛入门经典] UVA 12174 - Shuffle
紫书P247 例题8-15先预处理一遍每个原创 2014-08-25 12:59:01 · 1140 阅读 · 0 评论 -
[算法竞赛入门经典] UVA 714 - Copying Books
紫书P244 例题 8-10。直接二分最小值,倒着贪心原创 2014-08-23 20:56:36 · 743 阅读 · 0 评论 -
[算法竞赛入门经典] UVA 1471 - Defense Lines
紫书例题8-8。原创 2014-08-21 14:50:48 · 882 阅读 · 0 评论 -
棋盘覆盖问题
#include <stdio.h>#include <string.h>#include <math.h>#include <stdlib.h>#include <algorithm>#include <ctype.h>#include <iostream>#include <set>#include <map>#include <queue>#include <stack>原创 2015-06-15 20:48:06 · 607 阅读 · 0 评论 -
UVA 120 - Stacks of Flapjacks
输入一行数字,代表从上到下的饼的编号,现可以对第k张饼以上的编号整体翻转。问要如何操作使饼的编号为非递减序列。 此题是Special Judge,答案不唯一。 我的思路就是用两个数组,一个数组存读入的顺序编号,另一个存排序后的编号。 然后从后往前处理,当a[i] 不等于 b[i]的时候,有两种操作方式: 1、a[0] 等于 b[i],这种直接执行整体翻转第k张饼以上的编号即可。 2、a[0原创 2015-06-15 23:11:22 · 630 阅读 · 0 评论 -
[算法入门经典] 7.5.3 八数码问题 | HDU 1043
这个游戏小时候玩过,在书上看到原创 2014-06-04 16:58:50 · 1191 阅读 · 1 评论 -
[算法入门经典] 例题7-3 倒水问题 | HDU 1495
以前看到这个题,没有思路,今天回过头看了一下,就是广搜原创 2014-06-04 10:28:25 · 2191 阅读 · 1 评论 -
[算法入门经典] 8.2 归并排序
#include int a[1000]={0,2,3,1,4,5,7,6,8,9,0}, b[1000]; //下标从1开始存储void mergeSort(int x, int y){ if(y - x > 1) { int m = (x + y) / 2; mergeSort(x, m); mergeSort(m, y原创 2014-07-30 17:19:32 · 819 阅读 · 0 评论 -
[算法入门经典] 区间最少覆盖问题 UVA 10020 - Minimal coverage
按算法入门经典的思路去模拟原创 2014-08-11 21:15:48 · 1025 阅读 · 0 评论 -
UVA 11572 - Unique Snowflakes
输入一个长度为n(n <= 106)的序列A,找到一个尽量长的连续子序列AL~AR,使得该序列中没有相同得元素。 一开始用得map做的,用变量s存储子序列开始位置。 然后开始把map中每个出现的数字改为数字的下标。 然后从左到右枚举子序列结束位置i,当map[a[i]]的值不为零时,需要把map[s]~map[a[i]]的值改为0。然后才能继续向后扩展。 但是用map做的代码超时了,然后看了原创 2015-06-17 15:23:17 · 817 阅读 · 0 评论 -
UVA 11054 - Wine trading in Gergovia
把k个单位的酒从一个村庄运到相邻村庄需要k个单位的劳动力。 问最少需要多少劳动力可以满足所有村庄的需求? 由于所有位置的和一定为0,令最左端的位置为a1。 1、如果a1 > 0 那么a1买的酒一定需要经过a2才能到达,a2到a1需要的劳动力也就可以求出了,即:abs(a1)。 然后就把求a1到an需要的劳动力,转换为a2到an需要的劳动力 + abs(ai) 此时a2需要更新为a1 + a原创 2015-06-16 15:53:08 · 590 阅读 · 0 评论 -
UVA 11134 - Fabled Rooks
由于任意两个小车不能在同一行和同一列,那可以把行和列拆成一维来处理。这样就把问题转换为:把[1,n]中的每个数字填到每个区间里。假设有[1,6] [1,5] [1,7] 三个区间。 想一想1应该优先填到哪个区间里呢? 我们一定要把1填到区间[1,5]中,因为另外两个区间已经包含区间[1,5]。不会对后面的操作造成影响。对于[1,n]中的每个数贪心的策略是,尽量拿区间右端点小的那个即可。#incl原创 2015-06-16 12:22:59 · 615 阅读 · 0 评论 -
UVA 1605 - Building for UN
题意:输入一个数字n代表有n个国家,输出一种楼层排布,使得任意两个不同得国家都有一对相邻的格子(同层有公共边 或 相邻层同一位置)。并且自己国家的格子都是间接连通的。 此题答案不唯一,Special Judge。 其实仔细想想2层楼就够了,一层是每一行是一种国家,另一层是每一列是一种国家。#include <stdio.h>int main(){ int n; char ch原创 2015-06-16 08:58:23 · 823 阅读 · 0 评论 -
[算法竞赛入门经典] UVA 1152 - 4 Values whose Sum is 0 | POJ 2785
直接暴力复杂度太高,可以先把A+原创 2014-08-15 19:00:47 · 1954 阅读 · 1 评论