2011年12月31日
摘要: UVA_10602 这个题目可以用贪心去做。 我们不妨先看一下这样一个贪心的思路,每次我们都去拼需要press的字符数最少的单词,这样做是否可以呢?实际上我们可以找到这样一个反例, 3 aaaab aaaabbb aaaac 如果按这样的贪心思路就会输出 9 aaaab aaaac aaaabbb 但实际上正确的结果为 8 aaaab aaaabbb aaaac 尽管上面的想法是错误的,但我们也或多或少会得到些启发,对于这组测试数据之所以没有最优,是由于相比最优的结果多press了一个b,而之所以多press了这个b,是由于我们一开始没有去拼和aaaab有最大前缀的aa... 阅读全文
posted @ 2011-12-31 20:11 Staginner 阅读(573) 评论(0) 推荐(0) 编辑
摘要: UVA_714 这个题目可以二分每个人分到的页数的上限,然后看能否安排成功并更新相应的max和min值,这样我们就得到了安排给每个人的页数的最大值的最小值。 题目要求输出一个安排方案,并且要求标号越小的人工作量越小,这一点我们可以用贪心策略来保证,只要让标号大的人分配到的工作量尽可能大即可。但同时要求每个人至少要有一本书的工作量,这一点可以在分配工作量时用一个判断,即剩下的书至少要等于劳动力的数量。#include<stdio.h>#include<string.h>#define MAXD 510int K, M, a[MAXD], p[MAXD][MAXD], nu 阅读全文
posted @ 2011-12-31 18:08 Staginner 阅读(703) 评论(0) 推荐(0) 编辑
摘要: UVA_10954 看了别人解题报告之后发现累加的过程可以这样操作,每次取最小的两个元素加和,然后把和当作一个新元素放进集合,直到剩下一个元素,然后把中间结果加起来就是要求的结果。实际上这个题目就是哈弗曼编码,在LRJ树上155页有讲到。#include<stdio.h>#include<string.h>#include<stdlib.h>#define MAXD 5010int N, a[MAXD], q[MAXD];int cmp(const void *_p, const void *_q){ int *p = (int *)_p; int *q = 阅读全文
posted @ 2011-12-31 17:02 Staginner 阅读(546) 评论(0) 推荐(0) 编辑