ZOJ3791An Easy Game做題心得

2021-06-27 00:12:41 字數 843 閱讀 6087

題目大意:

給你原始01串和目標串,每次選擇m位取反,問k次操作後得到目標串的方案數。

解題思路:

剛開始看到這題,一點思路都沒有,也想過很多方法,我試著按操作次數劃分狀態,不行,按位數劃分狀態不行,進行狀壓也不行。按操作有後效性,位數劃分和狀壓則直接爆表,結果還是忍不住看了題解。

不得不說這題的解題方法很是巧妙,對於每一位數都有兩個狀態,0或者1,如果單獨看每一位,經過一次操作,就會使得原來的對應關係改變,相同變成不同,不同變成相同,也就是說將這兩串進行異或得到的新串代表的就是每一位是否滿足條件。經過k次操作之後要得到的就是現有串的值變為0。

考慮到每一位都是與眾不同的,因此,將它們抽象為乙個個的小球,那麼本題就變成了在兩個箱子中有分別有a,b個球,現在每次從兩個箱子中拿出總共m個球放入對方箱子,求k次後b箱為0個的方案數。

這就是乙個組合問題了。

具體**如下:

#include#include#includeusing namespace std;

#define mod 1000000009

typedef long long ll;

ll c[111][111],dp[111][111];

ll n,m,k;

string s1,s2;

int main()

{ c[0][0] = 1;

for(int i = 1;i<=100;i++)

{c[i][0] = 1;

c[i][i] = 1;

for(int j = 1;j>n>>k>>m)

{cin>>s1>>s2;

int tmp = 0;

for(int i = 0;i

按順序輸出ZOJ

description 讀入乙個字串,字串中包含zoj三個字元,個數不一定相等,按zoj的順序輸出,當某個字元用完時,剩下的仍然按照zoj的順序輸出。input 題目包含多組用例,每組用例佔一行,包含zoj三個字元,當輸入 e 時表示輸入結束。1 length 100。output 對於每組輸入,請...

很有趣的ZOJ

是不是zoj不能新增注釋的啊?很奇怪。這是1057的ac include stdio.h include math.h int main else printf a has d points.b has d points.n aa,bb return 0 新增一行注釋之後 include stdio...

hdoj 3791 二叉搜尋樹

型別 二叉搜尋樹 題目 給定乙個序列,構造乙個二叉搜尋樹,然後對給定的其他序列和第乙個序列相比,判斷兩個序列是否能組成同一顆二叉搜尋樹 按照第乙個序列先構造一棵二叉搜尋樹,然後對其他序列,同樣構造一棵二叉搜尋樹,如果兩棵樹相同,則其先序和後序序列相同,可以根據兩棵樹的先序和後序序列判斷結果 hdoj...