TJTJ
2026-10-05 16:20:18
发布于:广东
1阅读
0回复
0点赞
循环dp无脑做,注意处理左右重合情况即可
#include<iostream>
#include<vector>
#include<algorithm>
#include<unordered_map>
#include<queue>
#include<cmath>
#include<stack>
#define ll long long
#define si short int
#define INF 0xffffff
using namespace std;
const int N=32;
ll n,m;
ll dp[N<<1][2];
int main() {
cin>>n>>m;
dp[0][0]=1;
for(ll i=1;i<=m;i++) {
for(ll j=0;j<n;j++) {
ll l=(j-1+n)%n,r=(j+1)%n;
if(l==r) dp[j][i&1]=dp[l][~i&1];
else dp[j][i&1]=dp[l][~i&1]+dp[r][~i&1];
// cout<<dp[j][i&1]<<" ";
}
// cout<<"\n";
}
cout<<dp[0][m&1];
}
这里空空如也







有帮助,赞一个