C# 状态机DP代码
public class Solution {
public int LongestString(int x, int y, int z) {
int[,,,] cache = new int[x + 1, y + 1, z + 1, 3];
// st = 0 : "AA", st = 1 : "BB", st = 2 : "AB"
for (int i = 0; i <= x; i++){
for (int j = 0; j <= y; j++){
for (int k = 0; k <= z; k++){
for (int st = 0; st <= 2; st++){
cache[i, j, k, st] = -1;
}
}
}
}
return Math.Max(DFS(x, y, z, 0), DFS(x, y, z, 1));
int DFS(int i, int j, int k, int st){
if (cache[i, j, k, st] != -1) return cache[i, j, k, st];
if (st == 0){
cache[i, j, k, st] = j > 0 ? DFS(i, j - 1, k, 1) + 2 : 0;
}
else{
int ans1 = i > 0 ? DFS(i - 1, j, k, 0) + 2 : 0;
int ans2 = k > 0 ? DFS(i, j, k - 1, 2) + 2 : 0;
cache[i, j, k, st] = Math.Max(ans1, ans2);
}
return cache[i, j, k, st];
}
}
}
C# 贪心代码
public class Solution {
public int LongestString(int x, int y, int z) {
return (Math.Min(x, y) * 2 + z) * 2 + (x != y ? 2 : 0);
}
}