2023年蓝桥杯大学A组第二题:有奖问答(一维动态规划解法)

题目描述

小蓝正在参与一个现场问答的节目。

活动中一共有 30 道题目,每题只有答对和答错两种情况,每答对一题得 10 分,答错一题分数归零。

小蓝可以在任意时刻结束答题并获得目前分数对应的奖项,之后不能再答任何题目。

最高奖项需要 100 分,所以到达 100 分时小蓝会直接停止答题。

已知小蓝最终实际获得了 70 分对应的奖项,请问小蓝所有可能的答题情况有多少种?

本题的结果为一个整数,在提交答案时只输出这个整数,输出多余的内容将无法得分。

解题思路

根据题目可知,在题目数≥8题时,最后8题一定是【×+8√】,只需考虑除最后8题前面题目的作答情况。

考虑一维动态规划,fi定义为i个题时,小蓝获得70分的答题情况的种类数,状态转移过程可以表示为,从i-1道题到i道题过程中,最前面的题作答是√还是×,若不考虑任何条件,则fi=2fi-1,即每多一道题,前面的题可以是两种情况,相乘即可。

初始状态:f7=1(全对),f8=1,考虑到100分会直接停止,在i=8到17的过程中,除最后8题,前面的题不可能出现得100分的情况,故fi=2fi-1

i=18时,若最前面的题为√,则会出现100分的情况,故f18=2*f17-1

i=19时,i=18包含【9√+x+x+9√】的情况,此时若最前面的题为√,则会直接停止,f19=2*f18-1

考虑前面9题均为√的情况,可以推得i=19到i=28时,状态转移方程为fi=2fi-1-2^(i-19)

i=29,需考虑i=28时存在【9√+x+10√+×+9√】情况,同理i=30需考虑i=29的特殊情况。

最后将f7~f30进行相加得到答案:8335366

代码

cpp 复制代码
#include<bits/stdc++.h>
using namespace std;
int main() {
	vector<int> f(31, 0);
	f[7] = 1;
	f[8] = 1;
	for (int i = 9; i < 18; i++)
		f[i] = 2 * f[i - 1];
	f[18] = 2 * f[17] - 1;
	int t = 1;
	for (int i = 19; i <= 28; i++)
	{
		f[i] = 2 * f[i - 1]-t;
		t *= 2;
	}
	f[29] = 2 * f[28] - (t - 1);
	t *= 2;
	f[30] = 2 * f[29] - (t - 3);
	int sum = 0;
	for (int i = 7; i <= 30; i++) {
		sum += f[i];
	}
	cout << sum;
	return 0;
}
相关推荐
会周易的程序员4 小时前
aiDgePLC — IEC61131-3 ST PLC 虚拟机调试与运行环境
c++·物联网·虚拟机·st·工业协议·iec61131·梯形图
Tasiorh4 小时前
《基于LSTM-RNN-CBAM模型和动态规划模型的交易策略》
rnn·lstm·动态规划
wuminyu5 小时前
JVM利用io_uring优化堆外内存性能原理剖析
java·linux·c语言·jvm·c++
gumichef5 小时前
第二章:C/C++内存管理
c++·内存管理
小龙报9 小时前
【优选算法】1.搜索插入位置 2.x的平方根
java·c语言·数据结构·c++·python·算法·蓝桥杯
A_humble_scholar9 小时前
Linux(二) C++ TCP/UDP网络编程
linux·网络·c++
SNAKEpc1213811 小时前
OpenGL(十五)- 着色器语言GLSL
c语言·c++·线性代数·算法·矩阵·图形渲染·着色器
欧特克_Glodon11 小时前
OpenCV计算机视觉开发入门与实践<六>:OpenCV架构模块简介
c++·人工智能·opencv·计算机视觉
Rabitebla11 小时前
C++11 新特性详解(一):列表初始化、initializer_list 与右值引用
java·开发语言·数据结构·c++·算法·leetcode·list
MC皮蛋侠客12 小时前
TDengine C++ 系列(11):性能模型与调优——从测量到优化
c++·php·tdengine