蓝桥杯第三周算法竞赛D题E题

发现更多计算机知识,欢迎访问Cr不是铬的个人网站

D迷宫逃脱

file 拿到题目一眼应该就能看出是可以用动态规划来解决。但是怎么定义dp呢?

这个题增加难度的点就在当所在位置与下一个要去的位置互质的时候,会消耗一把钥匙。当没有钥匙的时候就不能移动了。想到这里,我们可以定义一个三维的dp数组.

  • 定义dp

dp[i][j][k]表示从位置(1,1)到(i,j)消耗k把钥匙的最大值

  • 初始化

memset(dp,-0x3f3f,sizeof(dp))

dp[i][j][0] = a[1][1]

  • 状态转移方程

dp[i][j][k] = max(dp[i][j][k],dp[i-1][j][k] + a[i][j])

dp[i][j][k] = max(dp[i][j][k],dp[i-1][j][k-1] + a[i][j])互质

dp[i][j][k] = max(dp[i][j][k],dp[i][j-1][k] + a[i][j])

dp[i][j][k] = max(dp[i][j][k],dp[i][j-1][k-1] + a[i][j])互质

  • 输出答案

从dp[n][m][0] ~ dp[n][m][k]找到最大的即可

AC代码:

#include <bits/stdc++.h>
using namespace std;
#define LL long long
#define pb push_back
#define x first
#define y second
#define endl '\n'
const LL maxn = 4e05+7;
const LL N=1e05+10;
const LL mod=1e09+7;
typedef pair<int,int>pl;
priority_queue<LL , vector<LL>, greater<LL> >t;
priority_queue<LL> q;
LL gcd(LL a, LL b){return b > 0 ? gcd(b , a % b) : a;
}LL lcm(LL a , LL b){return a / gcd(a , b) * b;
}
int main()
{//不加不能AC//优化输入/输出操作的性能,并精确控制输出的格式ios::sync_with_stdio(false);cin.tie(0);cout.tie(0);cout.precision(10);int n,m,p;//读入行宽与高还要钥匙数目cin>>n>>m>>p;//适当开大一点//dp[i][j][k]表示从(1,1)到(i,j)消耗k把钥匙的最大路径和LL dp[n+5][m+5][p+5];LL a[n+5][m+5];for(int i = 1; i <= n;i++)for(int j = 1; j <= m;j++)cin>>a[i][j];//初始化memset(dp,-0x3f3f,sizeof(dp));dp[1][1][0] = a[1][1];for(int i = 1;  i<= n; i++)for(int j = 1; j <= m;j++)for(int k = 0; k <= p; k++){//能够从上转移if(i > 1){if(gcd(a[i-1][j],a[i][j]) == 1) {if (k > 0)//不可能出现互质且没消耗一把钥匙的情况{ dp[i][j][k] = max(dp[i][j][k], dp[i - 1][j][k - 1] + a[i][j]); }}else { dp[i][j][k] = max(dp[i][j][k], dp[i - 1][j][k] + a[i][j]); }}//能够从左边转移if(j > 1){if(gcd(a[i][j-1],a[i][j]) == 1) {if (k > 0)//不可能出现互质且没消耗一把钥匙的情况{ dp[i][j][k] = max(dp[i][j][k], dp[i][j - 1][k - 1] + a[i][j]); }}else { dp[i][j][k] = max(dp[i][j][k], dp[i][j - 1][k] + a[i][j]); }}}//适当小一点LL maxx = -1e18;for(int i = 0; i <= p; i++)maxx = max(maxx,dp[n][m][i]);if(maxx>0)cout<<maxx<<endl;elsecout<<-1<<endl;return 0;
}

E深秋的苹果

file 这个是一道二分的题目,中规中矩写就行,但是注意此题右端点要开很大!

AC代码:

#include <bits/stdc++.h>
using namespace std;
#define LL long long
#define pb push_back
#define x first
#define y second
#define endl '\n'
const LL maxn = 4e05+7;
const LL N=2e05+10;
const LL mod=1e09+7;
typedef pair<int,int>pl;
priority_queue<LL , vector<LL>, greater<LL> >t;
priority_queue<LL> q;
LL gcd(LL a, LL b){return b > 0 ? gcd(b , a % b) : a;
}LL lcm(LL a , LL b){return a / gcd(a , b) * b;
}
int n,m;
int a[N];
bool check (LL mid)
{LL pre = 0, sum = 0,group = 1;//刚开始就是一组for(int i = 0;  i < n;i++){if(pre + sum * a[i] <= mid)//可以分在一组{pre += sum*a[i];sum += a[i];}else//新开一组{group++;pre = 0;sum = a[i];//这组开始就是a[i]}if(group > m)return false;}return true;
}
int main() {//优化输入/输出操作的性能,并精确控制输出的格式ios::sync_with_stdio(false);cin.tie(0);cout.tie(0);cout.precision(10);cin>>n>>m;for(int i = 0; i < n;i++)cin>>a[i];//二分思路LL l = 0, r = 3e18;//开大点,防止意外while( l < r){LL mid = l + (r - l)/ 2; //避免可能的超界if(check(mid)) { r = mid; }else { l = mid + 1; }}cout<<l<<endl;return 0;
}

本文由博客一文多发平台 OpenWrite 发布!

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

如若内容造成侵权/违法违规/事实不符,请联系编程知识网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

openGauss学习笔记-125 openGauss 数据库管理-设置账本数据库-校验账本数据一致性

文章目录 openGauss学习笔记-125 openGauss 数据库管理-设置账本数据库-校验账本数据一致性125.1 前提条件125.2 背景信息125.3 操作步骤 openGauss学习笔记-125 openGauss 数据库管理-设置账本数据库-校验账本数据一致性 125.1 前提条件 数据库正常运行&#xff0c;并且对防…

2023最新软件测试20个基础面试题及答案

什么是软件测试&#xff1f; 答案&#xff1a;软件测试是指在预定的环境中运行程序&#xff0c;为了发现软件存在的错误、缺陷以及其他不符合要求的行为的过程。 软件测试的目的是什么&#xff1f; 答案&#xff1a;软件测试的主要目的是保证软件的质量&#xff0c;并尽可能大…

大数据架构Lambda-架构师(六十九)

随着信息时代技术的发展&#xff0c;数据量的快速增加逐渐飙升到了惊人的数量级别。并且数据的采集与处理技术还在更新加快。大数据中&#xff0c;结构化占比百分之15左右&#xff0c;其余百分之85都是非结构化数据&#xff0c;他们大量存在于社交网络、互联网和电子商务等领域…

TikTok运营干货——养号篇

随着国内抖音红利的进一步释放&#xff0c;越来越多人涌入了TikTok国内外市场。而TikTok作为海外新兴的社媒平台&#xff0c;也在迅速的发展着&#xff0c;吸引了大批的跨境电商玩家入驻。然而&#xff0c;TikTok运营的一大难点就是养号&#xff0c;许多人还没开始转化号就被封…

小程序action-sheet结合自定义tabbar显示

要实现此效果&#xff0c;遇到的问题&#xff1a;背景在电脑端调试的情况正常的情况下&#xff0c;手机端点击事件工单&#xff0c;返回回来的时候action-sheet卡住在屏幕上&#xff0c;点击遮罩层都不消失。更奇怪的是 这种情况并不是每次发生&#xff0c;而是有时候发生&…

【星海出品】云存储 ceph

https://ceph.com/en/ 建议运行带有两个网络的Ceph存储集群&#xff1a;公共&#xff08;前端&#xff09;网络和集群&#xff08;后端&#xff09;网络。为了支持两个网络&#xff0c;每个Ceph节点都需要有多个NIC。 Monitor 一个Ceph集群需要多个Monitor组成的小集群&#x…

【AI视野·今日Robot 机器人论文速览 第六十三期】Thu, 26 Oct 2023

AI视野今日CS.Robotics 机器人学论文速览 Fri, 27 Oct 2023 Totally 27 papers &#x1f449;上期速览✈更多精彩请移步主页 Daily Robotics Papers 6-DoF Stability Field via Diffusion Models Authors Takuma Yoneda, Tianchong Jiang, Gregory Shakhnarovich, Matthew R. …

多标签页文件管理器 - Win系统

多标签页文件管理器 - Win系统 前言My Files-X Free360文件夹升级Win11 前言 Win10系统自带的文件管理器不支持多标签页功能&#xff0c;本文推荐几款多标签页文件管理器&#xff0c;可以在一个文件管理器窗口中打开多个标签页。 My Files-X Free 此文件管理器支持多标签页&…

SpringCloud微服务:Nacos的集群、负载均衡、环境隔离

目录 集群 在user-service的yml文件配置集群 启动服务 负载均衡 order-service配置集群 设置负载均衡 当本地集群的服务挂掉时 访问权重 环境隔离 1、Nacos服务分级存储模型 一级是服务&#xff0c;例如userservice 二级是集群&#xff0c;例如杭州或上海 …

【算法】复习搜索与图论

&#x1f34e; 博客主页&#xff1a;&#x1f319;披星戴月的贾维斯 &#x1f34e; 欢迎关注&#xff1a;&#x1f44d;点赞&#x1f343;收藏&#x1f525;留言 &#x1f347;系列专栏&#xff1a;&#x1f319; 蓝桥杯 &#x1f319;请不要相信胜利就像山坡上的蒲公英一样唾手…

OpenCV基础应用(4)— 如何改变图像的透明度

前言&#xff1a;Hello大家好&#xff0c;我是小哥谈。本节课就手把手教你如何改变图像的透明度&#xff0c;希望大家学习之后能够有所收获~&#xff01;&#x1f308; 目录 &#x1f680;1.技术介绍 &#x1f680;2.实现代码 &#x1f680;1.技术介绍 改变图像透明度的实…

用户的生命周期

用户生命周期是指用户在产品使用过程中的状态变化&#xff0c;一般分为5个阶段&#xff0c;分别为引入期、成长期、成熟期、沉默期和流失期。用户生命周期能够反映不同阶段用户的状态&#xff0c;可根据用户的不同状态进行针对性运营。运营中常说的拉新、促活、留存就是基于用户…