→题目链接←
【题解】
a[ 0 ][ 0 ]=1;
a[ i ][ j ]=a[ i ][ j-1 ]+a[ i-1 ][ i-j ]; (i从1~n j从1~i)
ans=a[ n ][ n ]*2;
中间%一%就好
【代码】
#include<bits/stdc++.h>
#define ll long long
using namespace std;
int n,mod;
ll a[2][4222];
int main(){
scanf("%d%d",&n,&mod);
if(n==1){
printf("%d\n",1%mod);
return 0;
}
a[0][0]=1;
int x=1;
for(int i=1; i<=n; i++){
for(int j=1; j<=i; j++)a[x][j]=(a[x][j-1]+a[x^1][i-j])%mod;
memset(a[x^1],0,sizeof(a[x^1]));
x^=1;
}
printf("%lld\n",a[x^1][n]*2%mod);
return 0;
}