下午睡太早导致晚上睡不着。。。。
半夜三更爬起来准备做题目,但是由于最近久攻一道难题不下,很是郁闷,遂冒出了想刷水题的记录=、=。
从1.00到5.00一共刷了6道水题,效率不高不低,总之刷的心情还是蛮愉快的。总结本来不想写了(向总:Liong den 啊,你又欠我总结了啦),但是觉得虽然是水题我却也被水了几下,好吧,还是写写。。。
刷的大都是poj的中文题,E文不好省得翻译了。。。
1.poj1062昂贵的聘礼
很囧的说,我一拿到这道题就把它想成费用流了(ms还做得出),后来发现不就是个图论吗。其实题中还有个等级限制有些蹊跷,WA了半天才知道是你选出来交易的人中等级之差最大不超过M,这样最短路还不好做,遂枚举这一维。
2.poj1088滑雪
真真意义上的水题,关于图论一类的题目,思维定势的打了个SPFA,众所周知SPFA最坏复杂度为O(NM),没想到这道题还真被我碰上了,开始RE了无数次,改成循环队列就TLE了。。。后遂改成了O(N)的记忆化搜索,代码短了不少撇开不说,还一遍AC。。
3.poj1091跳蚤
湖南01省选的题目,做过又忘记了。。其实这题目挺不错的。
题目大意是这样的:选出n个小于等于 M 的数使得这些数和 M 的gcd为1(分先后顺序),求方案数。
正确做法其实很快就想出来了,但是觉得复杂度太高自己把自己枪毙了,后来仔细想想发现实际上很低,带上了个高精也是0ms。其实想法很简单,我们实际上是要求出这 n个数的gcd和m互质,假设 M 有质因子a1,a2...an,定义t(i)为n个数含的有gcd含有约数i的方案数(很容易想出t(i)=(m/i)n),那么根据容斥原理将会是:
ans=t(1)-t(a1)-t(a2)-...-t(an)+t(a1*a2)+t(a1*a3)+...+t(a1*an)+...+t(an-1*an)-t(a1*a2*a3)-......
复杂度为2n,其中n为M的质因子的个数,开始就是觉得这个n会很大,后来发现n最大不超过8,在M<108的范围内最坏为9699690(这个数还挺有趣的),他的质因子为2,3,5,7,11,13,17,19。
4.poj1192最优连通子集
题目大意:给你一颗无根的带点权的树,选出一颗权值最大的子树。
O(N)的树形DP就可以了,开始看错题了,看成求一条权值最大的链了。
5.poj1191棋盘分割
刘书上的原题,详见p116。
主要是均方差通过数学变形变成求最小平方和这里比较巧妙。
6.poj1149pigs
也是不错的题,网络流,建图。
两个用户有交集也就意味着后面的那位用户可以接收到前面这位用户所剩余的流量,最大流就这样建出来了。
做水题也能反映出一些问题,发现我对复杂度的分析还很欠缺,有时间去看看《算法导论》补补习去。。。