蓝桥杯 2020.07

试题 E: 矩阵

本题总分:15 分
【问题描述】
把 1 ∼ 2020 放在 2 × 1010 的矩阵里。要求同一行中右边的比左边大,同一列中下边的比上边的大。一共有多少种方案?
答案很大,你只需要给出方案数除以 2020 的余数即可。
【答案提交】
这是一道结果填空题,你只需要算出结果后提交即可。本题的结果为一个整数,在提交答案时只填写这个整数,填写多余的内容将无法得分。

#include <iostream>
using namespace std;
int dp[2021][2021];
int main() {
   
	int n = 2020;
	dp[1][1] = 1; // 1必然放在第一行
	// 只要保证第一行的数比第二行的数多就可以了,后面的数会越来越大,会符合小到大的规律
	for (int i = 2; i <= n; i++)
		for (int j = 1; j <= i; j++) {
   
			dp[i][j] += dp[i - 1][j - 1];
			if (i - j <= j)
				// 当进入if说明,i没有超过j的两倍了(如果i超过j的两倍,说明第一行肯定比第二行少了)
				// 本身就是取一半的数字,如果超过两倍,说明取不到一半,不能参与计算
				dp[i][j] += dp[i - 1][j];// 放到第二层
			dp[i][j] %= 2020;
		}
	printf("%d\n", dp[2020][1010]);
	return 0;
}
ans:1340

试题 F: 整除序列

时间限制: 1.0s 内存限制: 256.0MB 本题总分:15 分
【问题描述】
有一个序列,序列的第一个数是 n,后面的每个数是前一个数整除 2,请输出这个序列中值为正数的项。
【输入格式】
输入一行包含一个整数 n。
【输出格式】
输出一行,包含多个整数,相邻的整数之间用一个空格分隔,表示答案。
【样例输入】

20

【样例输出】


                
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值