2023蓝桥杯C/C++A组省赛 B题: 有奖问答|DFS搜索 、线性dp

题目链接:

1.有奖问答 - 蓝桥云课 (lanqiao.cn)

说明:

DFS做法:

因为是填空题,不用考虑超时,首先先考虑暴力做法DFS来做,根据题意,30道题,有一个答题的先后顺序,上一道题答了之后才能答下道题,所以自然地需要一个参数来表示答到第几道题了,也就是递归的层数。同时因为目标是找获得70分的方案,所以需要一个参数来记录得到的分数。对于一道题:要么答对,分数+10;要么答错,分数清0。这就是dfs的两个分支。因此,一个dfs程序的框架就出来了,时间复杂度为O(2^{30}) 。

这道题有点难的地方是要仔细读清楚题目,不要漏掉:答错了就变成0分;答到100分就停止答题;在答任意题目的时候都可以放弃作答,就是说找到一个70分的方案也不返回。

让人意外的是,加上一些剪枝的判断,DFS这个解法提交到网站上没有超时。

详细的看代码(DFS)

//#include<iostream>
//#include<queue>
#include<bits/stdc++.h>
#define int long long
#define endl '\n'
using namespace std;
const int N = 2e3+30;
int ans = 0;
//这道题有点难的地方是要仔细读清楚题目,
//不要漏掉:答错了就变成0分;答到100分就停止答题;在答任意题目的时候都可以放弃作答 

void dfs(int k,int score)//第几道题,得的分数
{
  //答道100分,停止
   if(score==100) return;
   
   //答满30道题 停止
   if(k>31) return;

   //两种绝对不可能有70分 的情况
   if(score>=80&&k>=25) return;
   if(score==0&&k>=25) return;

//达到70分记录,但不返回,可能继续作答
   if(score==70){
   	ans++;
   }
   
   if(score+10<=100)
   dfs(k+1,score+10);
   
   dfs(k+1,0);
   	
} 

signed main() {

    cin.tie(0);
    cout.tie(0);
    
    dfs(1,0);

    cout<<ans;
    return 0;
}

DP做法:

前面分析出:对于一道题,要么答对,分数+10;要么答错,分数清0。如果要得到70分,一定是连续答对7道题,是在答对前一道题的60分基础上再答对一道题,而60分又是在答对前一道题的50分基础上,这样一直递推,可以得出我们的dp数组应该是一个二维的(因为我们需要一维来跟踪记录分数,在第七道题开始的每一道题都可能得到70分,还需要一维来记录)——dp[i][j],i一个表示第几道题,j另一个表示得到多少分,也就是第i道题能获得j分的情况数。

递推公式借用一下题解区的图:

 特别注意:在第i道题做错的那里,只能累加到9分,因为取到10会结束,不能再递推下去 

代码(DP):

#include<bits/stdc++.h>
#define int long long
#define endl '\n'
using namespace std;
const int N = 30+10;
int ans = 0;
 
//将100等价成10表示 
int dp[N][15]={0}; 

signed main() {

    cin.tie(0);
    cout.tie(0);
    
    //第一道题答错或者答对都是一种情况 
    dp[1][0]=1,dp[1][1]=1; 
    
    for(int i=2;i<=30;i++){
    	for(int j=0;j<=9;j++){
    		if(j==0){
    			for(int k=0;k<=9;k++)//特别注意这里只能取到9,因为取到10会结束,不能在递推下去 
    			dp[i][j]+=dp[i-1][k];
			}else{
				dp[i][j]+=dp[i-1][j-1];
			}
		}
	}
    
    for(int i=7;i<=30;i++){
    	ans+=dp[i][7];
	}
    cout<<ans;
    return 0;
}

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:/a/484200.html

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

【算法篇】逐步理解动态规划1(斐波那契数列模型)

目录 斐波那契数列模型 1. 第N个泰波那契数 2.使用最小花费爬楼梯 3.解码方法 学过算法的应该知道&#xff0c;动态规划一直都是一个非常难的模块&#xff0c;无论是状态转移方程的定义还是dp表的填表&#xff0c;都非常难找到思路。在这个算法的支线专题中我会结合很多力…

Java学习笔记 | Java基础语法 | 03 | 流程控制语句

文章目录 0 前言1.流程控制语句1.1 流程控制语句分类1.2 顺序结构 2.判断语句2.1 if语句1. if语句格式1练习1&#xff1a;老丈人选女婿练习2&#xff1a;考试奖励 2. if语句格式2练习1&#xff1a;吃饭练习2&#xff1a;影院选座 3. if语句格式3练习1&#xff1a;考试奖励 2.2 …

Vue使用font-face自定义字体详解

目录 1 介绍2 使用2.1 语法2.2 属性说明2.3 Vue使用案例2.3.1 全局定义字体2.3.2 在页面使用 3 注意事项 1 介绍 font-face 是 CSS 中的一个规则&#xff0c;它允许你加载服务器上的字体文件&#xff08;远程或者本地&#xff09;&#xff0c;并在网页中使用这些字体。这样&am…

使用 STL 容器发生异常的常见原因分析与总结

目录 1、概述 2、使用STL列表中的元素越界 3、遍历STL列表删除元素时对迭代器自加处理有问题引发越界 4、更隐蔽的遍历STL列表删除元素时引发越界的场景 5、多线程同时操作STL列表时没有加锁导致冲突 6、对包含STL列表对象的结构体进行memset操作导致STL列表对象内存出异…

大学教材《C语言程序设计》(浙大版)课后习题解析 | 第一、二章

概述 本文主要提供《C语言程序设计》(浙大版) 第一、二章课后习题解析&#xff0c;以方便同学们完成题目后作为参考对照。后续将写出三、四章节课后习题解析&#xff0c;如想了解更多&#xff0c;请持续关注该专栏。 专栏直达链接&#xff1a;《C语言程序设计》(浙大版)_孟俊宇…

Hive SQL必刷练习题:复购率问题(*****)

是说这个数据表中&#xff0c;找到最后一天 &#xff0c;也就是今天的日期&#xff0c;max(date) over()S today 【借助开窗函数】 截至最后一天位置&#xff0c;也就是“今天“&#xff0c;表中的最新的一天 去看90天内“某商品复购率 近90天内购买它至少两次的人数 购买它…

c++常考基础知识(2)

二.c关键字 关键字汇总 c中共有63个关键字&#xff0c;其中包括int&#xff0c;char&#xff0c;double等类型关键字&#xff0c;if&#xff0c;else&#xff0c;while&#xff0c;do&#xff0c;等语法关键字&#xff0c;还有sizeof等函数关键字。 三.数据结构 1.数组&#x…

常见的OOM 问题的 6 种场景

今天跟大家一起聊聊线上服务出现 OOM 问题的 6 种场景,希望对你会有所帮助。 一、堆内存 OOM 堆内存 OOM 是最常见的 OOM 了。 出现堆内存 OOM 问题的异常信息如下: java.lang.OutOfMemoryError: Java heap space此 OOM 是由于 JVM 中 heap 的最大值,已经不能满足需求了…

Git的原理和使用(四)

目录 远程操作 理解分布式版本控制系统 远程仓库 新建远程仓库 克隆远程仓库 向远程仓库推送 拉取远程仓库 配置Git 忽略特殊文件 为命令配置别名 标签管理 理解标签 创建标签 操作标签 远程操作 理解分布式版本控制系统 1、每个人的电脑上都是一个完整的版本库…

批量重命名文件名,批量管理文件,复制后轻松删除原文件

在现代工作中&#xff0c;我们经常需要处理大量的文件&#xff0c;无论是工作文档、图片还是视频资料。对于很多人来说&#xff0c;文件管理是一项繁琐且耗时的任务。不过&#xff0c;现在有一种高效的文件管理方法&#xff0c;可以帮助你轻松复制文件后删除原文件夹&#xff0…

2024.03.24 exam

2024.03.24 exam 据说是事业单位考试例题&#xff0c;娱乐一下脑子

zabbix安装及使用(错误及解决方案)

安装zabbix 常见错误&#xff1a; Zabbix下载错误 6.0与5.0版本冲突 解决方法 yum -y install zabbix-server-mysql zabbix-web-mysql zabbix-get --skip-broken zabbix6.0-web 自己有数据库&#xff0c;使用以下命令 pid找不到 /var/log/zabbix/zabbix_server.log 错误&a…

Docker Command

小试牛刀 # 查看docker版本 docker -v docker --version # 查看帮助 docker --help # 永远的Hello World docker run hello-world镜像操作 查看本地已有的镜像 docker images -a :列出本地所有的镜像&#xff08;含中间映像层&#xff09; -q :只显示镜像ID --digests :显示…

尝试Docker Dev Environments

无法从本地目录创建容器环境 创建的容器环境无法在VS Code打开 从官方仓库打开 结果vscode报错。fine&#xff0c;告辞。老老实实用本地环境开发。

为什么LLM都在卷上下文长度?不是其他卷不起,而是上下文更有性价比!

大家好&#xff0c;我是木易&#xff0c;一个持续关注AI领域的互联网技术产品经理&#xff0c;国内Top2本科&#xff0c;美国Top10 CS研究生&#xff0c;MBA。我坚信AI是普通人变强的“外挂”&#xff0c;所以创建了“AI信息Gap”这个公众号&#xff0c;专注于分享AI全维度知识…

深度学习pytorch——2D函数优化实例(持续更新)

课程&#xff1a;课时46 优化问题实战_哔哩哔哩_bilibili 这就是我们今天要求的2D函数&#xff1a; 下图是使用python绘制出来的图像&#xff1a; 但是可以看出有4个最小值&#xff0c;但是还是不够直观&#xff0c;还是看课程里面给的比较好&#xff0c;蓝色是最低点位置&am…

哲学♂家带你用动态内存函数实现二维数组

提示&#xff1a;文章写完后&#xff0c;目录可以自动生成&#xff0c;如何生成可参考右边的帮助文档 目录 前言 一、思路分析 二、实现 总结 前言 最近在做题的时候发现一个比较考验技术的问题&#xff0c;用内存函数模拟实现二维数组&#xff0c;接下来给大家演示一下我的做…

20240318-2-推荐算法Graph_Embedding

Graph Embedding 在许多推荐场景下&#xff0c;可以用网络结构数据来刻画对象&#xff08;用户、商品等&#xff09;之间的关系。例如&#xff1a;可以将用户和商品作为网络中的结点&#xff0c;用户和商品之间的边代表购买关系。 Graph Embedding 是一种将网络中对象之间的关…

python项目格式代码风格

Visual Studio Code 选择使用 black 作为代码格式化工具&#xff0c;保证提交代码风格的统一 1. Install black pip install black2. Install black and isort extension for vscode: 3. 设定black及isort的格式化配置 3.1. ctrl , 打开配置面板 3.2. 在弹出的json配置中添…

域名防红源码-再次启用已经红掉拦截的域名-提示跳转浏览器打开

比如说你的域名已经红掉了被拦截了&#xff0c;还想继续在使用&#xff0c;那么你用这个系统后呢&#xff0c;他就会提示跳转浏览器打开。以此达到再次启用的效果。 假如你的域名是A&#xff0c;已经红掉的&#xff1b;使用此方法新加一个域名B&#xff1b;之后你每次发域名B或…