题解:P16225 [蓝桥杯 2026 省 A] 量子 2048
题目传送门
这居然是道数学题......
以下是我刚看到题的思路。
拿到题目,我们发现数据范围很小,
设
然后就出现了一个问题:只有
然后就可以愉快的开始找状态转移方程了!
首先想到,最后一行或者最后一列的数是没有选择的余地的(要保证每行每列有奇数个
其实到这里结论已经很明显了,但是我太蒟了没看出来。
我们能得到一个结论:每在后面添加
假设当前一共有
由此推出状态转移方程:
此时我还没意识到自己绕了个大圈子。
#include<iostream>
using namespace std;
const int N = 2050, mod = 998244353;
int dp[N][N];
int main(){
dp[2][2] = 2;
for (int i = 2 ; i <= 2048 ; ++i){
for (int j = 2 ; j <= 2048 ; ++j) {
dp[i + 1][j] = dp[i][j] * 2 % mod;
dp[i][j + 1] = dp[i][j] * 2 % mod;
}
}
cout << dp[2048][2048];
return 0;
}
AC
os:这不是 dp 板子么。
看完题解直接炸了。
我们根本没有必要挨个枚举,我们完全可以直接算出答案......
更简单的 AcCode:
#include<iostream>
using namespace std;
int main(){
int ans = 1;
for (int i = 1 ; i <= 4093 ; ++i)
ans = ans * 2 % 998244353;
cout << ans;
return 0;
}