![](https://img-blog.csdnimg.cn/20201014180756757.png?x-oss-process=image/resize,m_fixed,h_64,w_64)
Algorithm Design
文章平均质量分 55
Lighting_
这个作者很懒,什么都没留下…
展开
-
uva 1610 Party Games
这是第八章的第二个习题。这是细节上的问题, 想清楚不太难的。。。#include #include using namespace std;string haha[1003];int number;string str,s;char ans[100];void work();int main(){ /*freopen("1610.in","r",stdin); freop原创 2016-01-24 17:52:27 · 328 阅读 · 0 评论 -
(贪心+栈)UVa 11491 Erasing and Winning
也是贪心的策略,略有不同的是,当前状态影响的是之前的决策。如果当前点比栈顶元素大就擦去栈顶元素,直到擦不了为止。#include #include const int MaxN = 100000 + 20;char s[MaxN];inline int readchar(){ char sh = getchar(); while(sh==' ' || sh == '\n')原创 2016-01-24 17:57:28 · 369 阅读 · 0 评论 -
uva 1614 Hell on the Markets(数学相关)
首先证明,对于1到i的序列,可以选出一些数,使其和为1~sum[i]的任意一个数。设这性质对1~n的序列成立, 那么a_n+1 最多是sum[n]+1(当之前全为1时),所以a_n+1 到 a_n+1+sum[n] 的所有数都能被凑出来。显然对于1是成立的,所以原假设成立。。。如果sum【n】 为奇数,那么必无解;如果sum【n】为偶数,因为sum/2可以凑出来,所以必有解。66666原创 2016-01-24 18:11:00 · 356 阅读 · 0 评论 -
(中途相遇法)Uva 1618 Weak Key(分段DP+枚举)
枚举四个肯定是不行的,所以要枚举两个,我选择枚举中间的两个数,一个最大,一个最小。另外,两种情况如果将数组翻转过来就可以相互等效,所以我只考虑第一种——2413 (从小到大排序)为什么称为分段呢。。。你将会看到这是有道理的。设l[i][j] 是DP式,若i小于j,可分为data【i】 data【j】两种,若i 大于 j,又可分为data【i】 data【j】两种。并且这些情况都能在原创 2016-01-25 18:52:59 · 573 阅读 · 0 评论 -
uva 11536smallest sub-array(滑动窗口)
眼见是个水题,于是就随便了....用数组记录1到k所有数的个数,如果全满就更新ans。 维护L一定不能再右移(既是最优的)。虽然方法不是最好的,但是水题就不要计较了。。。#include #include using namespace std;const int maxn = 1000010;int a[maxn],iooi[120];int main() { a[0]原创 2016-01-25 21:36:57 · 394 阅读 · 0 评论 -
uva 1615 (区间选点)
显然的区间选点问题。。。#include #include #include #define eps 1e-7using namespace std;const int maxn = 10000+10;struct village { double o,l; bool operator < (const village& b) const { return l b.o;原创 2016-01-24 18:14:22 · 385 阅读 · 0 评论 -
(解题报告) Uva 1616 Caravan Robbers (商队抢劫者)(上凸包+队列+结构体)
去网上搜了这道题,都是暴力二分然后把小数还原为分数。虽然可以这么做但是不太像正解。。。接下来的方法没有用到小数化为分数,而是把分数作为结构体应用。 在朴素的基础上加了斜率优化,使得本解法的速度在UVA上排名第一。(如果加读优的话。。)原创 2016-01-24 13:03:23 · 1082 阅读 · 0 评论