有个细节需要关注就是题中说“同一列中下面的比上面的大,但是人家没说下面的一定比上面的小”这就说明了这个数肯定是当前矩阵中最大的数,不管放上面还是放下面都必须放在最右边,然后用dp的动态转移方程就行了
#include<bits/stdc++.h>
using namespace std;
int dp[1020][1020];
int main(){
cout<<dp[1010][1010]<<endl;
return 0;
}
#include<bits/stdc++.h>
using namespace std;
int dp[1020][1020];
int main(){
for(int i=1;i<=1010;i++)
{
dp[i][0]=1;
for(int j=1;j<=i;j++)//第一行的个数要不小于第二行的
{
if(i==j)dp[i][j]=dp[i][j-1];//放在第一行
else
{
dp[i][j]=(dp[i-1][j]+dp[i][j-1])%2020;
}
}
}cout<<dp[1010][1010]<<endl;
return 0;
}
0 回复
0 转发
0 喜欢
1 阅读



