矩阵(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;
}
posted @ 2020-10-14 20:54  Treasure_lee  阅读(413)  评论(0)    收藏  举报