前言:直接把它当做一道规律题来做。
矩阵
【问题描述】
把 1 ∼ 2020 放在 2 × 1010 的矩阵里。要求同一行中右边的比左边大,同一列中下边的比上边的大。一共有多少种方案?
答案很大,你只需要给出方案数除以 2020 的余数即可。
【答案提交】
这是一道结果填空题,你只需要算出结果后提交即可。本题的结果为一个整数,在提交答案时只填写这个整数,填写多余的内容将无法得分。
解题思路
枚举简单的 2*n 方案数
推测为 卡特兰数
直接打表…
#include<stdio.h>
#include<memory.h>
int dp[1020];
int main()
{
memset(dp, 0, sizeof(dp));
dp[0]=1, dp[1]=1;
for(int i=2; i<=1010; i++)
for(int j=0; j<=i; j++)
dp[i] = (dp[i]+dp[i-j-1]*dp[j])%2020;
printf("%d", dp[1010]);
return 0;
}
总结
比赛时候没办法的情况下,可以试一试这种找规律的方式做题,平时还是不推荐这样思考的…