雖然大三上學期學習了動態規劃算法,可也只是簡單地瞭解什麼是動態規劃算法,紙上談兵而已,並無真正地將這種算法運用到解題中,沒有真正體會到動態規劃算法的妙處。最近在準備CCF,有一道往年題目須要運用到動態規劃,我將這道題認真的敲了一下,也上網查閱參考了各位大神的代碼。收穫頗豐。算法
個人體會以下:學習
算法的學習是須要實踐的。不要想着先學習了理論再去敲代碼的想法已通過時了。說說個人想法吧。看到這道題目後,我首先想到的是運用排列組合思想求出公式,甚至拿出算法書要補充這方面的知識後再來寫這道題目。可是因爲拖延症,我將這道題目放了兩天沒去管它。眼見着CCF複習堅持不下去了。因而我逼着本身,硬着頭皮,開始敲代碼。實在不會,就上網查,終於理解了思路,並寫出了獨屬於個人C語言代碼。code
#include <stdio.h> #include <stdlib.h> #include <string.h> #include <math.h> int main() { long mod = 1000000007; int number; int i; long long status[1001][6] = {0}; scanf("%d",&number); for (i = 1; i < number + 1; i ++) { status[i][0] = 1; status[i][1] = (status[i - 1][1] * 2 + status[i - 1][0]) % mod; status[i][2] = (status[i - 1][2] + status[i - 1][0]) % mod; status[i][3] = (status[i - 1][3] * 2 + status[i - 1][1]) % mod; status[i][4] = (status[i - 1][4] * 2 + status[i - 1][2] + status[i - 1][1]) % mod; status[i][5] = (status[i - 1][5] * 2 + status[i - 1][4] + status[i - 1][3]) % mod; } printf("%lld\n",status[number][5]); return 0; }