Code quy hoạch động bitmask - COWGIRL bị sai

nguồn bài: https://oj.vnoi.info/problem/cowgirl

Em chào mọi người.

Em đang gặp vấn đề không giải quyết được, em chạy test của đề bài đúng mà các test còn lại lại không đúng (em dùng code mẫu trên mạng để thử). Xin mọi người giúp em sửa lỗi với ạ.

CODE:

#include <bits/stdc++.h>
#define BIT(x,i) ( ((x) >> (i)) &1)
//#define FOR(i,a,b) for (int i=a, _b = b; i<=_b; i++)
#define MASK(x) (1 << x)
using namespace std;

const int MAX = 6;
const int MAXX = MASK(MAX);

int m,n,f[MAX][MAXX];

bool check(int mask1, int mask2) {
    for (int i=0; i<m-1; i++)
        if (BIT(mask1,i)==BIT(mask2,i)&&BIT(mask1,i+1)==BIT(mask2,i+1)&&BIT(mask1,i)==BIT(mask1,i+1))
            return false;
    return true;
}

void solve() {
    cin>>m>>n;
    if (m<n) swap(m,n);
    for (int i=0; i< MASK(m); i++)
        f[1][i] = 1;
    for (int i=2; i<=n; i++)
        for (int mask = 0; mask < MASK(m); mask++) {
            f[i][mask] = 0;
            for (int maskk = 0; maskk < MASK(m); maskk++) {
                if (!check(mask,maskk))
                    f[i][mask] += f[i-1][maskk];
            }
        }
    long long res =0;
    for (int i=0; i<MASK(m); i++)
        res += f[n][i];
    cout<<res;
}

int main() {
    ios_base::sync_with_stdio(false);
    cin.tie(0);
    int t;
    cin>>t;
    while (t--) {
        solve();
    }
    return 0;
}

Bạn viết ra 1 phiên bản rõ hơn của code bạn (bỏ hết define theo competitive programming style) nhé.

83% thành viên diễn đàn không hỏi bài tập, còn bạn thì sao?