洛谷 P1310 表示式的值(棧 DP)

2022-04-06 17:13:52 字數 890 閱讀 9447

首先因為有優先順序和括號,可以先把表示式化成字尾表示式的形式,其中用'.'表示這乙個點是數字。

用u記錄得到0的方案數,v記錄得到1的方案數。

設兩個步驟的運算結果經過每個符號到乙個結果時,

第乙個運算結果算出0的方案數為t1,1的方案數為t2。第二個算出0的方案數為t3,算出1的方案數為t4。

則有: 當符號是「⊕」時,得到0的方案數為t1*t3,1的方案數:t1*t4+t2*t3+t2*t4

當符號是「×」時,得到0的方案數為t1*t3+t1*t4+t2*t3,1的方案數:t2*t4

ac**:

1 #include2 #include3

using

namespace

std;

4const

int n=100005;5

const

int mod=10007;6

intl,top,k;

7char

c[n],ans[n],st[n];

8int

u[n],v[n];

9int

main()

19if(c[i]==')'

)23if(c[i]!='

('&&c[i]!='

)') ans[++k]='.'

;24}25

while(top) ans[++k]=st[top--];

26for(int i=1;i<=k;i++)

31if(ans[i]=='*'

) 36

if(ans[i]=='+'

)41}42 printf("

%d",u[1

]);43

return0;

44 }

ac**

洛谷 P1310 表示式的值 解題報告

對於1 位二進位制變數定義兩種運算 運算的優先順序是 先計算括號內的,再計算括號外的。運算優先於 運算,即計算表示式時,先計算 運算,再計算 運算。例如 計算表示式a b c時,先計算 b c,其結果再與 a 做 運算。現給定乙個未完成的表示式,例如 請你在橫線處填入數 0或者1 請問有多少種填法可...

P1310 表示式的值

原題鏈結 water lift 一波講解,然後我們就會了這個題,然後我們就要寫部落格啦qwq 這是個布林表示式基計數問題。這個其實 就是 或運算,就是 與運算。我們將這個式子通俗得看成 x y 和 x y 我們設x0是使x為0的方案數,x1是使x為1的方案數 y0是使y為0的方案數,y1是使y為1的...

資料結構 P1310 表示式的值

題目鏈結 對於1 位二進位制變數定義兩種運算 運算的優先順序是 先計算括號內的,再計算括號外的。運算優先於 運算,即計算表示式時,先計算 運算,再計算 運算。例如 計算表示式a b c時,先計算 b c,其結果再與 a 做 運算。現給定乙個未完成的表示式,例如 請你在橫線處填入數字00或者11 請問...