E. Sheep Eat Wolves

news/2024/9/20 7:03:12/ 标签: 算法, bfs

https://codeforces.com/gym/104869/problem/E

赛时队友想贪心,贪不了一点,我想了数学办法每次都送固定的发现送过去就不满足了

赛后补,暴力做O(n4)

至少要几次才能把安全所有羊送到对岸去

考虑最短路,bfs,用数组存下所有状态

dp[N][N][2]第一维是羊的数量,第二维是狼的数量,第三维是从左边到右,还是从右边到左边,

牧羊人在左边,牧羊人在右边

记录的是左岸的动物状态

暴力写,去除一些不合法状态,状态转移就好了

最后完成任务的状态是min(dp[0][?][1]) 最后一次必然把牧羊人在右边

// Problem: E. Sheep Eat Wolves
// Contest: Codeforces - The 2023 ICPC Asia Shenyang Regional Contest (The 2nd Universal Cup. Stage 13: Shenyang)
// URL: https://codeforces.com/gym/104869/problem/E
// Memory Limit: 512 MB
// Time Limit: 2000 ms
// 
// Powered by CP Editor (https://cpeditor.org)#include<iostream>
#include<cstring>
#include<queue>
using namespace std;
typedef long long ll;
const int N=1e2+9;
struct node{int x,y,state;
};
int dp[N][N][2];//x y 0/1   人的位置左岸,右岸
queue<node> Q;
int main(){int X,Y,p,q;cin>>X>>Y>>p>>q;memset(dp,-1,sizeof(dp));//未转移过Q.push({X,Y,0});dp[X][Y][0]=0;//->dp[0][?][1] minwhile(!Q.empty()){auto [x,y,z]=Q.front();Q.pop();if(!z){//->for(int i=0;i<=x;i++){for(int j=0;j<=y;j++){if(i+j>p){continue;}if((y-j)>(x-i)+q && (x-i)>0){//!x 就都到对岸了,合法continue;}if(dp[x-i][y-j][z^1]!=-1){continue;}dp[x-i][y-j][z^1]=dp[x][y][z]+1;Q.push({x-i,y-j,z^1});}}}else{//<-for(int i=0;i<=X-x;i++){for(int j=0;j<=Y-y;j++){if(i+j>p){continue;}if((Y-y-j)>(X-x-i)+q && (X-x-i)>0){continue;}if(dp[x+i][y+j][z^1]!=-1){continue;}dp[x+i][y+j][z^1]=dp[x][y][z]+1;Q.push({x+i,y+j,z^1});}}}}int ans=(1<<30);for(int i=0;i<=Y;i++){if(dp[0][i][1]!=-1){ans=min(ans,dp[0][i][1]);}}if(ans==(1<<30)){cout<<-1<<'\n';}else{cout<<ans<<'\n';	}return 0;
}


http://www.ppmy.cn/news/1519113.html

相关文章

dbc转换成excel

‌要将DBC文件转换为Excel格式&#xff0c;可以使用Canoe软件进行导出。‌ 使用Canoe软件将DBC文件导出为Excel格式的具体步骤如下&#xff1a; 打开Canoe软件&#xff0c;并在项目工程中加载或创建一个DBC文件。在主菜单中选择“文件”>“导出”>“数据库”选项。在打…

C++ 两线交点程序(Program for Point of Intersection of Two Lines)

示例图 给定对应于线 AB 的点 A 和 B 以及对应于线 PQ 的点 P 和 Q&#xff0c;找到这些线的交点。这些点在 2D 平面中给出&#xff0c;并带有其 X 和 Y 坐标。示例&#xff1a; 输入&#xff1a;A (1, 1), B (4, 4) C (1, 8), D (2, 4) 输出&#xff1a;给定直…

百度文库文章-暂存下-------题 目: 链式简单选择排序

题 目: 链式简单选择排序 初始条件&#xff1a; 理论&#xff1a;学习了《数据结构》课程&#xff0c;掌握了基本的数据结构和常用的算法&#xff1b; 实践&#xff1a;计算机技术系实验室提供计算机及软件开发环境。 要求完成的主要任务: &#xff08;包括课程设计工作量…

点儿企业规范

常见命名风格介绍 大驼峰&#xff1a;所有单词首字母都需要大写&#xff0c;UserController小驼峰&#xff1a;除了第一个单词&#xff0c;其他单词首字母大写&#xff0c;userController蛇形&#xff1a;用下划线 _ 作为单词间的分隔符&#xff0c;一般小写&#xff0c;user_…

阿里云Ubuntu系统安装/简单使用Kafka

一、安装kafka 1.下载安装包 1.1下载地址 https://kafka.apache.org/downloads 注意&#xff1a; 版本可以随意选择&#xff0c;我们选择版本为2.4.1 2.压缩文件上传/解压 2.1上传 2.2解压文件 #解压文件指令 tar -zxvf kafka_2.12-2.4.1.tgz -C /export/server/ #创建软…

Linux网络:TCP UDP socket

Linux网络&#xff1a;TCP & UDP socket socket 套接字sockaddr网络字节序IP地址转换bzero UDP socketsocketbindrecvfromsendto TCP socketsocketbindlistenconnectacceptsendrecv 本博客讲解 Linux 下的 TCP 和 UDP 套接字编程。无论是创建套接字、绑定地址&#xff0c;还…

【算法基础实验】图论-Dijkstra最短路径

理论知识 边的放松 边的放松&#xff08;Edge Relaxation&#xff09;是图算法中的一个关键操作&#xff0c;主要用于解决最短路径问题。它的核心思想是在遍历图的过程中&#xff0c;通过比较和更新路径的长度&#xff0c;逐步找到从起点到每个顶点的最短路径。 边的放松过程…

使用 Pandas 进行数据可视化:全面指南(六)

在数据分析的过程中,数据的可视化是一个至关重要的环节。通过图形展示数据,不仅能够帮助我们直观地理解数据,还能够揭示数据背后的规律和趋势。Pandas 作为 Python 生态系统中强大的数据分析库,不仅提供了数据处理和分析的功能,还内置了方便易用的可视化方法。本文将详细介…

AD19基础应用技巧:捕捉对象功能的讲解鼠标”绿色十字”大光标、小光标切换

AD PCB 中心点捕捉功能&#xff1a; 线段、圆、边框中心点捕捉。 有时候不想要鼠标自动捕捉中心点怎么办&#xff1f; 关于Altium Designer 20 的捕抓功能的讲解&#xff08;https://blog.csdn.net/weixin_44599693/article/details/126177841&#xff09; ——- AD PCB画板…

服务器上部署Wordpress:Docker技术教程

今天在三丰云免费服务器上进行部署测试&#xff0c;这款不错的免费服务器配置为1核CPU、1G内存、10G硬盘、5M带宽&#xff0c;给人惊喜。三丰云免费服务器的性能稳定&#xff0c;让我可以尽情发挥技术的魔力。 Docker是一种轻量级容器技术&#xff0c;而Wordpress则是广受欢迎…

C++国密SM2算法加解密的使用

目录 效果 在线校验 代码实现参考 项目 下载 效果 加密字符串:lxw 123abcD 2024-09-01:12:00加密后信息:042E82EE8ACE2BD56FA71DC6A0C34190627AA365F8EEE6261903BEE327A85EB5E1D6E78F2D79AD6F6DC9E45C0829625DC3165BB78BD897F99044A640F930653747939CF9D5A10C8216F945A559…

【Leetcode 2357 】 使数组中所有元素都等于零 —— 哈希表

给你一个非负整数数组 nums 。在一步操作中&#xff0c;你必须&#xff1a; 选出一个正整数 x &#xff0c;x 需要小于或等于 nums 中 最小 的 非零 元素。nums 中的每个正整数都减去 x。 返回使 nums 中所有元素都等于 0 需要的 最少 操作数。 示例 1&#xff1a; 输入&am…

【手撕数据结构】二叉树oj题

目录 单值二叉树题目描述题目思路及代码 相同的树题目描述题目思路及代码 对称二叉树题目描述题目思路及代码 另一棵树的子树题目描述题目思路及代码 二叉树的前序遍历题目描述题目思路及代码 二叉树的构建与遍历题目描述题目思路及代码 单值二叉树 题目描述 题目思路及代码 …

10、Flink 动态表之表到流的转换详解

表到流的转换 动态表可以像普通数据库表一样通过 INSERT、UPDATE 和 DELETE 来不断修改,它可能是一个只有一行、不断更新的表,也可能是一个 insert-only 的表,没有 UPDATE 和 DELETE 修改,或者介于两者之间的其他表。 在将动态表转换为流或将其写入外部系统时,需要对这些…

JVM GC 调优

文章目录 引言I 调整JVM的默认堆内存配置1.1 java命令启动jar包时配置JVM 的内存参数1.2 基于Tomcat服务器部署的java应用,配置JVM 的内存参数II JVM GC 调优基本概念: 应用程序的响应时间(RT)和吞吐量(QPS)JVM调优原理调优思路调优方法JVM调优技巧建议引言 内存参数:ht…

为Ubuntu换颗“心”

对于现在的Linux发行版操作系统,都默认配置好相应的Kernel,但其版本远比最新的要旧,而最新的Kernel除了会修复已发现的BUG,有时还会更新部分框架以及新增功能模块代码,为了确保系统的稳定,还有体验下新功能,我们只好对操作系统的进行换“心”手术,这手术可不简单,首先…

Go 语言版本管理——Goenv

Go 语言版本管理——Goenv 命令安装 goenv安装和切换 Go 版本 goenv 是一个专门管理 Go 语言版本的工具。 命令 安装 goenv github-goenv git clone https://github.com/go-nv/goenv.git ~/.goenv echo export GOENV_ROOT"$HOME/.goenv" >> ~/.bash_profile…

字符编码简介

目录 1. ASCLL 2. GB2312 3. GBK/gbk 4. GB18030 5. Unicode 6. 总结 1. ASCLL 在计算机刚开始被美国人发明的时候&#xff0c;需要将字符存储到计算机进行运算或打印&#xff0c;于是选取了95 个可见字符&#xff08;数字0-9&#xff0c;英文字母&#xff0c;标点符号&…

超详细Git基本命令使用(二)

&#x1f600;前言 本篇博文是关于 Git基本命令的使用&#xff0c;希望你能够喜欢 &#x1f3e0;个人主页&#xff1a;晨犀主页 &#x1f9d1;个人简介&#xff1a;大家好&#xff0c;我是晨犀&#xff0c;希望我的文章可以帮助到大家&#xff0c;您的满意是我的动力&#x1f6…

SprinBoot+Vue实验室考勤管理小程序的设计与实现

目录 1 项目介绍2 项目截图3 核心代码3.1 Controller3.2 Service3.3 Dao3.4 application.yml3.5 SpringbootApplication3.5 Vue3.6 uniapp代码 4 数据库表设计5 文档参考6 计算机毕设选题推荐7 源码获取 1 项目介绍 博主个人介绍&#xff1a;CSDN认证博客专家&#xff0c;CSDN平…