表示式得到期望結果的組合種數

2021-09-26 08:58:13 字數 2828 閱讀 4361

給定乙個只由0(假)、1(真)、&(邏輯與)、|(邏輯或)和^(異或)五種字元組成的字串express,再給定乙個布林值desires。求出express能有多少種組合方式,可以達到desired的結果。並輸出你所求出的總方案數對10^9+7取模後的值。

輸出兩行,第一行包含乙個只有0、1、&、|和^組成的字串。其長度小於500,第二行只有乙個布林值,代表desired。
輸出乙個整數,表示取模後的答案。
示例1

1^0|0|1

false

2
1^((0|0)|1)和1^(0|(0|1))可以得到false
示例2

1

false

0
時間複雜度o(n^3),空間複雜度o(n^2)。
//方法一:暴力列舉 o(n!) o(n)

//執行超時:您的程式未能在規定時間內執行結束,請檢查是否迴圈有錯或演算法複雜度過大。

//case通過率為15.00%

#includeusing namespace std;

const int number=1000000007;

bool isvalid(const string& exp)

for (int i = 0; i < exp.size(); i += 2)

} for (int i = 1; i < exp.size(); i += 2)

} return true;

}long long p(const string& exp, const string& desired, int left, int right)

else

} long long res = 0;

if (desired=="true")

else if (exp[i] == '|')

else

} }else

else if (exp[i] == '|')

else

} }return res;

}int main()

else

system("pause");

return 0;

}

//方法二:記憶化搜尋,減支   通過

#includeusing namespace std;

const int number=1000000007;

vector> memot;

vector> memof;

bool isvalid(const string& exp)

for (int i = 0; i < exp.size(); i += 2)

} for (int i = 1; i < exp.size(); i += 2)

} return true;

}long long p(const string& exp, const string& desired, int left, int right)

else

} long long res = 0;

if (desired=="true")

for (int i = left + 1; i < right; i += 2)

else if (exp[i] == '|')

else

} memot[left][right]=res;

} else

for (int i = left + 1; i < right; i += 2)

else if (exp[i] == '|')

else

}

memof[left][right]=res;

}

return res;

}int main()

else

system("pause");

return 0;

}

//方法三:dp o(n^3) o(n^2)

#includeusing namespace std;

const int number = 1000000007;

bool isvalid(const string& exp)

for (int i = 0; i < exp.size(); i += 2)

} for (int i = 1; i < exp.size(); i += 2)

} return true;

}int main()

int n = exp.size();

vector> dpt(n, vector(n, 0));

vector> dpf(n, vector(n, 0));

for (int i = 0; i < n; i += 2)

for (int i = 2; i < n; i += 2)

else if (exp[k + 1] == '|')

else

}} }

if (desired=="true")

else

system("pause");

return 0;

}

注:本體輸入對於c++有陷阱,c++讀入bool值是0和非0,而不是true和false(用true和false輸入後,bool變數輸出都是0)。

計算字串對應表示式的結果

問題描述 以字串的形式給定乙個表示式,表示式中包含一位的數字,加號運算子 減 負 號運算子 以及括號 輸出這個運算子按照四則運算規則運算之後的結果,假定所有給定的表示式都是規範的。測試樣例 輸入 3 9 1 輸出 11 參考 class solution def calculatorhelper s...

使用棧來完成乙個表示式的結果

7 2 2 5 1 5 3 4 3 2 6 2 外鏈轉存失敗,源站可能有防盜煉機制,建議將儲存下來直接上傳 img xzpnjzre 1614845779689 通過乙個 index 值 索引 來遍歷我們的表示式 如果我們發現是乙個數字,就直接入數棧 如果發現掃瞄到是乙個符號,就分如下情況 當表示式...

Qt中使用正規表示式返回匹配的所有結果集

python的正則中有findall函式返回乙個所有匹配的結果list.今天在使用qt的時候發現似乎沒有類似的方法.進而自己寫了乙個,如下 brief 獲取所有的匹配結果 param text 要匹配的文字 param regexp 正規表示式串 return 匹配的結果集 qset uploadb...