編輯:關於Android編程
跟D2 L3 類似,唯一的區別是D2L3是兩數之差至多為K, 這題是至少K,增加了一點難度,DP的狀態不好想。類似D2L3,只考慮未匹配的數,不過將未匹配的數分成了兩類,一類是Good integers,g >= n + K,另一類是, s > n && s < n + K。以從大到小的順序考慮2N個數。
代碼如下:
#include #include #include #include #include #include #include #include #include #include #include #include #include #include #include using namespace std; /*************** Program Begin **********************/ const int MOD = 1000000007; const int MAX_N = 50; const int MAX_K = 10; int dp[2 * MAX_N + 1][2 * MAX_N + 1][1 << MAX_K]; class AlienAndSetDiv1 { public: int K; int calc(int s, int g, int n) { int res = 0; if (-1 != dp[n][g][s]) { return dp[n][g][s]; } if (n == 0) { if (0 == s && 0 == g) { // base case res = 1; } } else { if (0 == s && 0 == g) { if (1 == K) { res += 2 * calc(0, 1, n-1); // add } else { res += 2 * calc(1, 0, n-1); // add } res %= MOD; } else if (0 == s && g != 0) { res += calc(0, g-1, n-1); // match if (1 == K) { res += calc(0, g+1, n-1); // add } else { res += calc(1, g, n-1); // add } res %= MOD; } else if (s != 0 && 0 == g) { // K != 1,只能add int newset = s; int i = 0; for (i = 0; (newset & 0x80000000 ) == 0; newset = ( newset << 1 ), ++i) { // 注意位操作的優先級,要加括號 } int mx = 31 - i; // mx 為s不為0的最高位 if (n + mx + 1 - (n - 1) >= K) { // g -> 1 int t = (s - (1 << mx)); // 清除mx位 res += calc( (t << 1) | 1, 1, n - 1 ); // add res %= MOD; } else { res += calc( (s << 1) | 1, 0, n - 1 ); // add res %= MOD; } } else { // s != 0 && 0 != g // K != 1 int newset = s; int i = 0; for (i = 0; (newset & 0x80000000 ) == 0; newset = ( newset << 1 ), ++i) { } int mx = 31 - i; // mx 為s不為0的最高位 if ( n + mx + 1 - (n - 1) >= K) { // 判斷是否使g變化 int t = (s - (1 << mx)); res += calc(t << 1, g, n-1); // match res += calc( (t << 1) | 1, g+1, n - 1 ); // add } else { res += calc(s << 1, g-1, n-1); // match res += calc( (s << 1) | 1, g, n - 1 ); // add } res %= MOD; } } dp[n][g][s] = res; return res; } int getNumber(int N, int K) { int res = 0; this->K = K; memset(dp, -1, sizeof(dp)); res = calc(0, 0, 2 * N); return res; } }; /************** Program End ************************/
一、自定義View的分類1、組合View2、繼承重寫View3、全寫View二、簡介組合View,就是組合一些View來形成一個新的View。例如QQ的頭部欄三、了解**
從5.0版本開始,微信只支持用手機號開通賬號,那麼問題來了,如果換了手機號,原來的微信是不是也作廢了?裡面的好友怎麼辦?還有我們的零錢啊!!不用著急,換號不
為大家提供的MySQL忘記密碼的解決方案,供大家參考,具體內容如下1.在操作系統windows操作系統,xp或win7.中進入如下目錄:復制代碼 代碼如下:C:\User
先看下利用wheelview實現滾動隨機選擇號碼效果:直接上代碼 首頁就是dialog顯示不在描述 主要看dialog代碼package com.yskj.jh.whee
最近在項目中用到listview中再嵌套一個listview,兩層也有監
注冊很多app或者網絡賬戶的時候,經常需要手機獲取驗證碼,來完成注冊,那
OpenGL ESAndroid包括高性能2D和3D圖形開放圖形庫(Op
由於Android系統是基於Linux的,所以在Android系統存在兩