下午睡太早導致晚上睡不著。。。。
半夜三更爬起來準備做題目,但是由於最近久攻一道難題不下,很是鬱悶,遂冒出了想刷水題的記錄=、=。
從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
也是不錯的題,網路流,建圖。
兩個使用者有交集也就意味著後面的那位使用者可以接收到前面這位使用者所剩餘的流量,最大流就這樣建出來了。
做水題也能反映出一些問題,發現我對複雜度的分析還很欠缺,有時間去看看《演算法導論》補補習去。。。