dp[i][j]表示i个数,第一行放i个,对于1到2020的每个数,我们从小到大往里放,要时刻保证第一行的数大于等于第二行的数才能满足要求,因为越往后放的数越大,要保证后边放的大数放在下面。
#include<bits/stdc++.h>
using namespace std;
int dp[2030][2000];
int main()
{
dp[1][1]=1;
for(int i=2;i<=2020;i++)
for(int j=1;j<=i;j++)
{
dp[i][j]+=dp[i-1][j-1];
if(i-j<=j)
dp[i][j]+=dp[i-1][j];
dp[i][j]%=2020;
}
printf("%d\n",dp[2020][1010]);
return 0;
}