<?xml version="1.0" encoding="utf-8" ?><rss version="2.0"><channel><title><![CDATA[unixcsir的专栏]]></title><description><![CDATA[]]></description><link>https://blog.youkuaiyun.com/unixcsir</link><language>zh-cn</language><generator>https://blog.youkuaiyun.com/</generator><copyright><![CDATA[Copyright &copy; unixcsir]]></copyright><item><title><![CDATA[Observer]]></title><link>https://blog.youkuaiyun.com/unixcsir/article/details/19083317</link><guid>https://blog.youkuaiyun.com/unixcsir/article/details/19083317</guid><author>unixcsir</author><pubDate>Wed, 12 Feb 2014 13:34:02 +0800</pubDate><description><![CDATA[C++ Code:
#include 
#include 
#include 
#include 

class AbstractObserver
{
public:
	virtual int	 GetObserverId(void) const = 0;
	virtual void UpdateMethod(int temperature, int humidity) const = 0;
}]]></description><category></category></item><item><title><![CDATA[Decorator]]></title><link>https://blog.youkuaiyun.com/unixcsir/article/details/19081681</link><guid>https://blog.youkuaiyun.com/unixcsir/article/details/19081681</guid><author>unixcsir</author><pubDate>Tue, 11 Feb 2014 16:57:37 +0800</pubDate><description><![CDATA[C++ Code:
#include 

class Componet
{
public:
	virtual int CalCost(void) = 0;
};

class ComponetBase : public Componet
{
private:
	int _baseCost;

public:
	ComponetBase(int bc) : _baseCost(bc) {}
	vi]]></description><category></category></item><item><title><![CDATA[Strategy]]></title><link>https://blog.youkuaiyun.com/unixcsir/article/details/19080129</link><guid>https://blog.youkuaiyun.com/unixcsir/article/details/19080129</guid><author>unixcsir</author><pubDate>Tue, 11 Feb 2014 16:41:22 +0800</pubDate><description><![CDATA[C++ Code:
#include 

class AlgorithmInterface
{
public:
	virtual int CalAns(int lhs, int rhs) = 0;
};

class SubMethod : public AlgorithmInterface
{
public:
	virtual int CalAns(int lhs, int rhs) { re]]></description><category></category></item><item><title><![CDATA[fzu_1894 志願者選拔( 單調隊列 )]]></title><link>https://blog.youkuaiyun.com/unixcsir/article/details/8910186</link><guid>https://blog.youkuaiyun.com/unixcsir/article/details/8910186</guid><author>unixcsir</author><pubDate>Fri, 10 May 2013 12:23:49 +0800</pubDate><description><![CDATA[分析：
如果使用純暴力的話會TLE的，問題的‘G’只求隊列中的最大值，可以使用單調隊列這個數據結構來維護隊列中的最大值
Code:
#include 
#include 
#include 
#include 
#include 
#include 
#include 
#include 
#include 
#include 
#include 
#include 
#include 
u]]></description><category></category></item><item><title><![CDATA[uva_11795_Mega Man's Mission( 簡單狀壓DP )]]></title><link>https://blog.youkuaiyun.com/unixcsir/article/details/8902182</link><guid>https://blog.youkuaiyun.com/unixcsir/article/details/8902182</guid><author>unixcsir</author><pubDate>Wed, 08 May 2013 19:58:06 +0800</pubDate><description><![CDATA[題意：
略
分析：
略,注意精度#include 
#include 
#include 
#include 
#include 
#include 
#include 
#include 
#include 
#include 
#include 
#include 
#include 
using namespace std;

#define REPI(i, s, e)   for(i]]></description><category></category></item><item><title><![CDATA[la_4727	Jump ( 经典模型变形 )]]></title><link>https://blog.youkuaiyun.com/unixcsir/article/details/8901079</link><guid>https://blog.youkuaiyun.com/unixcsir/article/details/8901079</guid><author>unixcsir</author><pubDate>Wed, 08 May 2013 16:41:44 +0800</pubDate><description><![CDATA[題意：
略
分析：
如果使用單純模擬的話，時間複雜度會比較大
這裡運用了DP的思想，如果知道1 到 n-1個人和k，最後退出的人的序號,那麼通過這個序號可以推算出1到n個人k的最後推出的人的序號
還不懂的建議自己去磨一下.
Code:
#include 
#include 
#include 
using namespace std;

const int MAXN = 500000]]></description><category></category></item><item><title><![CDATA[uva_11552_Fewest Flops( 经典DP模型 )]]></title><link>https://blog.youkuaiyun.com/unixcsir/article/details/8897433</link><guid>https://blog.youkuaiyun.com/unixcsir/article/details/8897433</guid><author>unixcsir</author><pubDate>Tue, 07 May 2013 21:25:31 +0800</pubDate><description><![CDATA[題意：
略
分析：
狀態：f[i][ch]，前i組以ch結尾所得的最小cnt
狀態轉移:f[i][ch] = min(f[i][ch], f[i-1][chp]+cost(i, chp, ch)）,其中cost(i, chp, ch)表示第i組變成目標的花費
Code:
#include 
#include 
#include 
#include 
#include 
#include]]></description><category></category></item><item><title><![CDATA[uva_10534_Wavio Sequence( LIS )]]></title><link>https://blog.youkuaiyun.com/unixcsir/article/details/8894228</link><guid>https://blog.youkuaiyun.com/unixcsir/article/details/8894228</guid><author>unixcsir</author><pubDate>Tue, 07 May 2013 11:10:02 +0800</pubDate><description><![CDATA[题意：
略
分析：
經典LIS問題，時間複雜度可以為o(nlogn)，至於O(n^2)是否可行，沒有試過
Code:
#include 
#include 
#include 
#include 
#include 
using namespace std;

#define REPI(i, s, e)   for(int i = (s); i <= (e); i ++)
#define]]></description><category></category></item><item><title><![CDATA[uva_11584_Partitioning by Palindromes( DP )]]></title><link>https://blog.youkuaiyun.com/unixcsir/article/details/8892273</link><guid>https://blog.youkuaiyun.com/unixcsir/article/details/8892273</guid><author>unixcsir</author><pubDate>Mon, 06 May 2013 20:30:41 +0800</pubDate><description><![CDATA[題意：
給你一個字符串，讓你去劃分該字符串，目標使得劃分出最小的回文串
分析：
一開始考慮是個區間DP，想都不想就寫了交上去，結果是TLE，後來發現數據量是10^3,區間DP的時間複雜度高達O(n^3)，TLE是正常的
正解:
f[i]表示字符串底i個字符的時候，所能劃分的最小回文串的數量
f[i] = min(f[i], f[j]+cost(j+1,i)).
Code；
#inc]]></description><category></category></item><item><title><![CDATA[uva_10167_Birthday Cake( 窮舉+卡精度 )]]></title><link>https://blog.youkuaiyun.com/unixcsir/article/details/8882030</link><guid>https://blog.youkuaiyun.com/unixcsir/article/details/8882030</guid><author>unixcsir</author><pubDate>Fri, 03 May 2013 21:39:02 +0800</pubDate><description><![CDATA[題意：
給你一系列的點，讓你找出一條直線AX+BY=0， 使得直線把這些點劃分爲兩個部分
分析：
由於題目給出的AB範圍小且爲整數，直接暴力可以過，不過這裏要注意精度問題，判斷是否在直線上不能直接與zero比較
Code:
#include 
#include 
#include 
#include 
#include 
#include 
#include 
#include 
#in]]></description><category></category></item><item><title><![CDATA[fzu_2120_數字排列（狀態壓縮DP）]]></title><link>https://blog.youkuaiyun.com/unixcsir/article/details/8869124</link><guid>https://blog.youkuaiyun.com/unixcsir/article/details/8869124</guid><author>unixcsir</author><pubDate>Tue, 30 Apr 2013 10:55:22 +0800</pubDate><description><![CDATA[題意：
略
分析：
這個應該可以暴力，具體沒有嘗試，不過看submit有400多ms的估計就是使用暴力的，對於這個題目我是使用狀態壓縮的方法解決的
把已經選擇了的數字看成一個集合
狀態：f[s][tail_idx] 表示選擇的集合爲s且放在最後一個數字的映射爲tail_idx的最小cost.
狀態轉移: f[s][tail_idx] = min(f[s-s0][k] + cost[n[]]></description><category></category></item><item><title><![CDATA[uva_10125_Sumsets( 二分 )]]></title><link>https://blog.youkuaiyun.com/unixcsir/article/details/8854730</link><guid>https://blog.youkuaiyun.com/unixcsir/article/details/8854730</guid><author>unixcsir</author><pubDate>Fri, 26 Apr 2013 15:41:14 +0800</pubDate><description><![CDATA[題意：
給你一個整數集合，要求你從中找出一個最大的d，使得a+b+c=d,其中a,b,c,d都是集合s中的不同元素
分析：
如果暴力的話O(N^4），但是可以使用二分解決，就是美劇a+b後對其結果排序，接着枚舉d-c如果二分查找a+b的結果中存在a+b = d-c，那麼這個d就是一個解
時間複雜度O(N^2*log(N*N))
Code:
#include 
#include 
#in]]></description><category></category></item><item><title><![CDATA[uva_10827_Maximum sum on a torus( 普通DP )]]></title><link>https://blog.youkuaiyun.com/unixcsir/article/details/8853907</link><guid>https://blog.youkuaiyun.com/unixcsir/article/details/8853907</guid><author>unixcsir</author><pubDate>Fri, 26 Apr 2013 13:03:27 +0800</pubDate><description><![CDATA[題目：
最大子矩陣，只不過行和列都可以向外延伸
分析：
簡單的DP，略
Code:
#include 
#include 
#include 
#include 
#include 
#include 
#include 
#include 
#include 
#include 
#include 
#include 
#include 
using namespace std;

#]]></description><category></category></item><item><title><![CDATA[uva_11627_Slalom( 二分 )]]></title><link>https://blog.youkuaiyun.com/unixcsir/article/details/8844894</link><guid>https://blog.youkuaiyun.com/unixcsir/article/details/8844894</guid><author>unixcsir</author><pubDate>Wed, 24 Apr 2013 15:15:26 +0800</pubDate><description><![CDATA[題意：
題目意思比較就是有n個障礙你必須通過，障礙的左面的座標已經給出，障礙的縱座標單調遞增，你有s個鞋子，每個鞋子的垂直速度是sj, 且你的水平速度不能大於vh，問最快通過所有障礙的鞋子的最大速度是多少？
分析：
由於橫速度恒定，二分枚舉速度。只要將當前障礙到下一個障礙之間的距離分解，然後求出下一個橫區間的範圍，然後判斷這個區間是否為合法區間就得出這個速度是否可行
Code:
#inc]]></description><category></category></item><item><title><![CDATA[uva_10905_Children's Game( 貪心好題 )]]></title><link>https://blog.youkuaiyun.com/unixcsir/article/details/8840198</link><guid>https://blog.youkuaiyun.com/unixcsir/article/details/8840198</guid><author>unixcsir</author><pubDate>Tue, 23 Apr 2013 15:48:31 +0800</pubDate><description><![CDATA[題意:
給定n個正整數，你的任務就是把他們連接成一個最大的整數
分析：
排序後直接輸出是不行的，反例：13, 1312
如果兩個數字的位數相等，那麼可以直接判斷，如果不等的話，對於某個數字要麼在前，要麼在後，枚舉這兩種情況就可以了
Code:
#include 
#include 
#include 
#include 
#include 
#include 
#include 
#include]]></description><category></category></item><item><title><![CDATA[uva_10382_Watering Grass( 貪心 )]]></title><link>https://blog.youkuaiyun.com/unixcsir/article/details/8839598</link><guid>https://blog.youkuaiyun.com/unixcsir/article/details/8839598</guid><author>unixcsir</author><pubDate>Tue, 23 Apr 2013 14:13:20 +0800</pubDate><description><![CDATA[題意：
噴水裝置能否覆蓋草坪,其實隻取決於圖中每個圓藍色部分能否將草坪覆蓋,這樣我們就將問題轉化成了有若幹線段,求覆蓋一個指定區間最少要多少條線段

分析：
題目可以作出如下轉化：


從最左開始使用貪心策略每次選擇一個包含當前最右的區間且擴張最遠的圓
Code:
#include 
#include 
#include 
#include 
using namespace st]]></description><category></category></item><item><title><![CDATA[LA_3602	DNA Consensus String ( hash, 貪心 )]]></title><link>https://blog.youkuaiyun.com/unixcsir/article/details/8836640</link><guid>https://blog.youkuaiyun.com/unixcsir/article/details/8836640</guid><author>unixcsir</author><pubDate>Mon, 22 Apr 2013 21:12:01 +0800</pubDate><description><![CDATA[題意：
給定m個長度爲n的DNA序列，求一個DNA序列到所有DNA序列的Hamming距離最小，兩個字符串的Hamming距離定義爲：字符不同的位置數
分析：
統計每一列的ACGT的數量，取最多的爲rst，然後統計Hamming距離
Code:
#include 
#include 
#include 
#include 
#include 
#include 
#include 
#includ]]></description><category></category></item><item><title><![CDATA[LA_3213	Ancient Cipher( 排序，hash )]]></title><link>https://blog.youkuaiyun.com/unixcsir/article/details/8836521</link><guid>https://blog.youkuaiyun.com/unixcsir/article/details/8836521</guid><author>unixcsir</author><pubDate>Mon, 22 Apr 2013 20:49:33 +0800</pubDate><description><![CDATA[题意：
一對字符串各有n個大寫字母，如果能組合出一個映射表的話則输出YES，否則NO.
分析：
簡單題，可以先對組字符串每個字符出現次數進行統計，然後排序，接着比較，時間複雜度O（n).
Code:
#include 
#include 
#include 
#include 
#include 
#include 
#include 
#include 
#include 
#include]]></description><category></category></item><item><title><![CDATA[uva_11039 - Building designing( 基數排序 )]]></title><link>https://blog.youkuaiyun.com/unixcsir/article/details/8836468</link><guid>https://blog.youkuaiyun.com/unixcsir/article/details/8836468</guid><author>unixcsir</author><pubDate>Mon, 22 Apr 2013 20:36:24 +0800</pubDate><description><![CDATA[題意:
有n個絕對值不同的整數（非0）,選出儘量多的數，排列成一個序列，正負相間且元素絕對值遞增，求最長的序列的長度.
分析：
可以先存下來接着使用nlogn的排序也可，這裏用了hash的基數排序
Code:
#include 
#include 
#include 
#include 
#include 
#include 
#include 
#include 
#include 
#incl]]></description><category></category></item><item><title><![CDATA[LA_4794	Sharing Chocolate( 狀態壓縮DP )]]></title><link>https://blog.youkuaiyun.com/unixcsir/article/details/8835065</link><guid>https://blog.youkuaiyun.com/unixcsir/article/details/8835065</guid><author>unixcsir</author><pubDate>Mon, 22 Apr 2013 16:17:10 +0800</pubDate><description><![CDATA[題意：
給你一塊n*m面積的矩形，每次只切割只能橫着切或者是豎着切，問能不能切割成指定的面積的集合
分析：
如果使用沒有優化的DP，比較容易想到如下：
狀態：f[r][c][S]，表示面積爲r*c的矩形能否切割成面積的集合S
狀態轉移： f[r][c][S] = 1, 當且緊當：f[r0][c][SR0] = f[r-r0][c][S^SR0] = 1 or f[r][c0][SC0] = f[r]]></description><category></category></item></channel></rss>