C語言編程——有趣的數(使用動態規劃實現)

雖然大三上學期學習了動態規劃算法,可也只是簡單地瞭解什麼是動態規劃算法,紙上談兵而已,並無真正地將這種算法運用到解題中,沒有真正體會到動態規劃算法的妙處。最近在準備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;
  }
相關文章
相關標籤/搜索