矩阵(DP+打表)
矩阵
题目:
把 1 ∼ 2020 放在 2 × 1010 的矩阵里。要求同一行中右边的比左边大,同一列中下边的比上边的大。一共有多少种方案?
答案很大,你只需要给出方案数除以 2020 的余数即可。
分析:

代码:
#include <bits/stdc++.h>
using namespace std;
typedef long long LL;
const int MAXN = 2030;
const int MOD = 2020;
int dp[MAXN][MAXN];
int main(){
int n=2020;
dp[1][1]=1;
for (int i=2;i<=n;i++)//i代表目前枚举了多少个数
for(int j=1;j<=i;j++){//j代表这i个数里有几个可以放在第一行,最少1个最多i个。
dp[i][j]+=dp[i-1][j-1];
if (i-j<=j){//如果第一行的数字个数>=第二行的个数,i-j代表第二行剩余的数字个数。
dp[i][j]+=dp[i-1][j];
}
dp[i][j]%=MOD;
}
cout<<dp[2020][1010]<<endl;
return 0;
}

浙公网安备 33010602011771号