E、矩阵
#include<bits/stdc++.h> using namespace std; #define ll long long ll f[1017][1017]; //f[i][j]表示第一行i个数,第二行j个数的方案数 int main(){ f[0][0]=1; for(int i=1;i<=1010;++i){ for(int j=0;j<=i;++j){ //因为第一行一定先放,所以 j<=i //未操作时的f[i][j]表示 第(第一行i个数,第二行j个数)时的数 if(i-1>=j){ // 若f[i][j]放第一行,则要保证 i-1>=j(上一次状态的第一行的个数一定比第二行的个数多) f[i][j]+=f[i-1][j]%2020; } f[i][j]+=f[i][j-1]%2020; //放第二行的情况 } } cout << f[1010][1010]%2020 << endl; return 0; }