做第一題的時候一點思路都沒有,看到第一眼就覺得應該用遞迴,因為我覺得是一種全排列,但是結果沒做出來,最後隊友用找規律的方法做了出來。
而且有乙個點的取值我也不理解,為什麼0級台階時有一種跳法。其實這是個數學問題,類似於c(0,0) = 1, 從0個中取0個,有一種實現的方法,就是乙個也不取。
**如下:
#include
using namespace std;
int main()
}cin>>t;
for(i=0;i>n;
cout<0;}
但是我第乙個思路是使用遞迴來做,結果導致超時了,遞迴**如下:
#include
using
namespace
std;
int calc(int n,int k)
return s;
}int main()
關於遞迴的一點思考:
最近做藍橋杯,很多題都想使用遞迴來做,但是沒有考慮到複雜度的問題,結果可能會導致超時或者爆棧,這是使用遞迴必須要注意的。
例如本體如果使用遞迴求解,複雜度為 n + n的2次方 +n的三次方 …+ n的n次方。假如 n為30,肯定會超時。
c. 平分遊戲
d. psd面試
這題從一開始我就沒讀懂題目的意思,根本沒有區分開最長回文子串行和最長回文子串的區別,建議不懂得旁友也趕緊區分一下。
最長回文子串一定是連續的乙個串,而最長回文子串行則不需要是一整個串,例如 「abc,ba」 的最長回文子串的長度是1,而最長回文子串行的長度是 5. (abcba) 最長回文子串行可以刪除不回文的字元。
求最長回文子串行有兩種做法
1.遞迴
#include
#include
#include
using
namespace
std;
int maxn(int a,int b)
int calc(string s,int begins,int ends)
if(begins>ends)
if(s[begins] == s[ends])
else
return sum;
}int main()
else temp+=s[i];
}// coutcout
0;}
以上,沒錯 我拿去交了以後又t了,讓我們來看看這段**的複雜度,如果字串的長度為 1000 ,那麼使用遞迴的方法則時間複雜度為 1+2的2次方+2的三次方+。。。2的400次方+。。。
總之就是指數**疊加增長,藍橋杯坑我,為啥老讓我寫遞迴,明明這麼慢。
第二種方法 動態規劃
我對動態規劃不太熟,一星期以前剛做了第一道動態規劃的題目。
然後在網上找了講dp求子序列的**
大致思想和遞迴是差不多的。
if string[i] = string[j] dp[i][j] = dp[i+1][j-1];
else dp[i][j] = max (dp[i][j-1],dp[i+1][j]);
當 i<=j 的時候,上式成立。且當 i == j的時候 dp[i][i] =1;
而且 i的變化方向 必須是從大到小,j的方向必須是從小到大。
這是由上述方程決定的。 dp的複雜度為 (n的平方)
#include
#include
#include
#include
#include
using
namespace
std;
int max2(int a,int b)
int calc(string s)
for(i=length -1;i>=0;i--)
}return dp[0][length-1];
}int main()
else temp +=s[i];
}//coutcout
0;}
廣東工業大學程式設計競賽決賽 C
小時候,我只能一階一階得爬樓梯,後來,我除了能一次爬一階,還可以一次爬兩階,到現在,我最多一次可以爬三階。那麼現在問題來了,我想爬上 n層樓,相鄰樓層之間有一段樓梯,雖然我一次可以爬 1個台階 2個台階和 3個台階,但是我在i與 i 1層之間的樓梯上時,我不能跨越到 i 1與 i 2層之間的樓梯。現...
廣東工業大學賽 H tmk買禮物
今天是校賽的日子,為了慶祝這麼喜慶的日子,tmk打算買些禮物給女票 lsh慶祝一下。tmk進入了雪梨超市,然後剛踏入的一瞬間,店主就對 tmk說 恭喜你成為了本店第 2147483647 位顧客,本店在搞乙個活動,對本店第 2147483647 位顧客進行贈送活動。你先看看你有多少錢?tmk一摸口袋...
19廣東工業大學 牛客J H補題
害!很久之前刷了一些題目,但是由於課程實在是沒時間好好品題 其實是太懶了 決心好好嚼一些當時沒有ac的題目!注 我是ac一題然後寫一題報告的,可能演算法有錯誤或者演算法不是最優,本人小白也請見諒 xd ac include using namespace std typedef long long ...