第十一届蓝桥杯 ——矩阵_六级不考550+不改名-CSDN博客https://blog.csdn.net/weixin_46239370/article/details/107557358
#include<iostream>
using namespace std;
int dp[1020][1020];
int main()
{
dp[0][0] = 1;
for(int i =0;i<=1010;i++)
{
for(int j =0;j<=1010;j++)
{
if(i-1>=j)
dp[i][j] += dp[i-1][j]%2020;
if(j>0)
dp[i][j] += dp[i][j-1]%2020;
}
}
cout<<dp[1010][1010];
return 0;
}
第二遍做,发现二层循环中对j的限制并不准确, 这里只要求(j>0) 就会出现像dp[1][2] =1 的这种情况,但是数字必须从上往下排,所以这种情况实际是不存在的,方案数更不可能等于1,故把(j>0)改成(j<=i) 更准确。
#include<iostream>
using namespace std;
int dp[1020][1020];
int main()
{
dp[0][0] = 1;
for(int i =0;i <=1010;i++){
for(int j =0;j<=1010;j++){
if(i-1>=j)
dp[i][j] += dp[i-1][j] % 2020;
if(j<=i)
dp[i][j] +=dp[i][j-1] % 2020;
}
}
cout<<dp[1010][1010];
return 0;
}