ICode9

精准搜索请尝试: 精确搜索
首页 > 其他分享> 文章详细

十一届蓝桥杯 矩阵

2022-01-24 20:33:30  阅读:134  来源: 互联网

标签:十一届 同一 int 个数 矩阵 下行 蓝桥 答案 dp


问题描述:

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

答案提交:
这是一道结果填空题,你只需要算出结果后提交即可。本题的结果为一个整数,在提交答案时只填写这个整数,填写多余的内容将无法得分。

答案:1340


思路:该题考察的是动态规划
假设dp[i][j]表示上行放i个数,下行放j个数时能形成多少种方案
因为要求同一行中右边的比左边大,同一列中下边的比上边的大。所以上下两行每一行只能从左依次一个一个放到右。且上行的数字个数要始终大于等于下行的即i>=j


我们可以用少一个数来表示dp[i][j],可知有以下两种情况
<1>当i=j,易知dp[i][j] = dp[i][j - 1],因为只能下行少一个数
<2>当i>j, dp[i][j] = dp[i - 1][j] + dp[i][j - 1], 因为此时可以上行少一个数即dp[i - 1][j]或下行少一个数即dp[i][j - 1]

#include <iostream>
using namespace std;
int dp[1015][1015];
int main()
{
	for (int i = 1; i <= 1010; i++)
		dp[i][0] = 1;
	for (int i = 1; i <= 1010; i++) {
		for (int j = 1; j <= i; j++) {
			if (i == j) dp[i][j] = dp[i][j - 1] % 2020;
			else dp[i][j] = (dp[i - 1][j] + dp[i][j - 1])%2020;
		}
	}
	cout << dp[1010][1010];
	return 0;
}​


 

标签:十一届,同一,int,个数,矩阵,下行,蓝桥,答案,dp
来源: https://blog.csdn.net/m0_66606971/article/details/122674246

本站声明: 1. iCode9 技术分享网(下文简称本站)提供的所有内容,仅供技术学习、探讨和分享;
2. 关于本站的所有留言、评论、转载及引用,纯属内容发起人的个人观点,与本站观点和立场无关;
3. 关于本站的所有言论和文字,纯属内容发起人的个人观点,与本站观点和立场无关;
4. 本站文章均是网友提供,不完全保证技术分享内容的完整性、准确性、时效性、风险性和版权归属;如您发现该文章侵犯了您的权益,可联系我们第一时间进行删除;
5. 本站为非盈利性的个人网站,所有内容不会用来进行牟利,也不会利用任何形式的广告来间接获益,纯粹是为了广大技术爱好者提供技术内容和技术思想的分享性交流网站。

专注分享技术,共同学习,共同进步。侵权联系[81616952@qq.com]

Copyright (C)ICode9.com, All Rights Reserved.

ICode9版权所有