阿里雲ECS高階班學習筆記 第六天

2021-10-07 13:36:52 字數 2084 閱讀 7868

阿里雲高校師生計畫

問題概述:

有一天jerry給tom出了一道題來考驗他。

jerry給了tom乙個長度為2n的只包含小寫字母的字串,讓tom將這個字串任意挑選字元,將其分成兩個等長的字串a和b(對於乙個si不能同時被選到a和b中),然後a要和reverse(b)相同(a和反轉後的b相同),問這樣的方案數有多少?tom有些為難,所以請你來幫幫他吧。

輸入乙個正整數n,和乙個長度為2n的字串。

輸出方案數。

示例1輸入:

2「abba」

輸出:4

所謂挑選n個字元變成a和b兩個字串,是指在原字串中抽出n個字元,這些字元的的順序保持不變,剩下字元的順序也保持不變,由此組成a和b兩個字串。

例如 "abcdef"挑選第2、3、5個字元,則分成 「bce」 和 「adf」 兩個串。

整體框架是dfs,列舉每個字元屬於a還是屬於b,搜尋過程中需要利用a和b的對稱性做加速處理,否則會超時。

比方說xcccddcccxdd

從左往右列舉a字串的構成,如果令第乙個x屬於a,根據對稱性,倒數第三個字元x一定是屬於b;

如此推導出末尾的dd一定屬於a,中間位置的dd一定屬於b,而且是b的頭兩個字元;

然後左邊ccc一定a,右邊ccc一定是b,由此得出1種方案。令第乙個x屬於b也可以用同樣的方式得到1種方案。

用這個思路直接寫**不太好寫,可以通過列舉二進位制,固定左半邊的選擇情況,然後對於每乙個case,通過dfs搜尋右半邊有多少種合法組合,搜尋過程中利用對稱性進行剪枝。

對於字元全部相同case如"aaaaaaaa",因為過程中無法剪枝,會退化成2^(2*n)。對於這種case,答案就是 c(2n,n) ,預判一下直接返回即可。

class

solution

}// 如果都是同樣的字母這種情況

if(issame)

else

for(

int i =

0; i < store.length; i++

)// 可匹配的情況

return

dfs(s, n,"",

0,"")

;}}/**

* 需要的資訊 原始字串,當前加入的位置,當前使用過的字元標記等

* @param s 原始字串

* @param n 一半單詞的數量

* @param left 左半邊的詞

* @param index 當前指向原始字串的位置

* @param right 右半邊的值

* @return 匹配數量

*/private

long

dfs(string s,

int n, string left,

int index, string right)

// system.out.println(t + " " + left);

if(left.

equals

(new

stringbuilder

(right)

.reverse()

.tostring()

))return0;

}for

(int i = index; i <

2* n; i++

)// 統計通過的示例

sum +=

dfs(s, n, left + s.

charat

(i), i +

1, tmpstr);}

// 返回結果到上一層,直到第一層返回給solution方法

return sum;

}/**

** @param up 上標

* @param down 下標

* @return 排列組合數量

*/private

longc(

int up,

int down)

int b =1;

for(

int i = up; i >

0; i--

)return a / b;

}}

阿里雲ECS六

阿里云云伺服器 1 elastic compute service,ecs 是一種處理能力可彈性伸縮的計算服務,其管理方式比物理伺服器更簡單高效。阿里云云伺服器幫助您快速構建更穩定 安全的應用,降低開發運維的難度和整體it成本,使您能夠更專注於核心業務創新。阿里雲伺服器的特點編輯 1,異地多點備份阿...

阿里雲ECS六

阿里云云伺服器 1加粗樣式 elastic compute service,ecs 是一種處理能力可彈性伸縮的計算服務,其管理方式比物理伺服器更簡單高效。阿里云云伺服器幫助您快速構建更穩定 安全的應用,降低開發運維的難度和整體it成本,使您能夠更專注於核心業務創新。阿里阿里雲伺服器的特點編輯 1,異...

使用阿里雲ECS進行深度學習筆記

學生一枚,嘗試一下用阿里雲的gpu伺服器跑深度學習。基本過程參照這篇部落格 記錄一下其中遇到的問題 1.建立完例項檢視一下配置 檢視顯示卡資訊,驅動和cuda版本 nvidia smi 3.建立自定義映象是需要時間的,不要著急釋放例項,確定映象狀態儲存完後再釋放,不然從頭再來,別問我怎麼知道的。4....