【Atcoder】 [ABC221G] Jumping sequence

news/2024/7/24 3:13:46 标签: 算法

题目链接

Atcoder方向
Luogu方向

题目解法

因为上下左右是对横纵坐标分别修改的,不好操作,考虑如何只考虑一维限制
考虑一个重要套路:将坐标轴旋转 45 ° 45\degree 45°,这样终点坐标会变为 A + B , A − B A+B,A-B A+B,AB
然后对横纵坐标分开做背包,然后记录方案即可
可以发现 d p dp dp 过程可以用 b i t s e t bitset bitset 优化,所以时间复杂度 O ( n 2 d ω ) O(\frac{n^2d}{\omega}) O(ωn2d)

#include <bits/stdc++.h>
using namespace std;
const int N(2010),D(1810);
int n,A,B,tA,tB,d[N];
bitset<N*D> bs[N];
inline int read(){
	int FF=0,RR=1;
	char ch=getchar();
	for(;!isdigit(ch);ch=getchar()) if(ch=='-') RR=-1;
	for(;isdigit(ch);ch=getchar()) FF=(FF<<1)+(FF<<3)+ch-48;
	return FF*RR;
}
int main(){
	n=read(),tA=read(),tB=read();A=tA+tB,B=tA-tB;
	int tot=0;
	for(int i=1;i<=n;i++) d[i]=read(),tot+=d[i];
	reverse(d+1,d+n+1);
	if(((A+tot)&1)||((B+tot)&1)){ puts("No");exit(0);}
	if(A+tot<0||B+tot<0||A>tot||B>tot){ puts("No");exit(0);}
	bs[0][0]=1;
	for(int i=1;i<=n;i++) bs[i]=bs[i-1]|(bs[i-1]<<d[i]);
	if(!bs[n][(A+tot)/2]||!bs[n][(B+tot)/2]){ puts("No");exit(0);}
	puts("Yes");
	int cur1=(A+tot)/2,cur2=(B+tot)/2;
	for(int i=n;i>=1;i--){
		bool f1=0,f2=0;
		if(cur1>=d[i]&&bs[i-1][cur1-d[i]]) cur1-=d[i],f1=1;
		if(cur2>=d[i]&&bs[i-1][cur2-d[i]]) cur2-=d[i],f2=1;
//		cout<<cur1<<' '<<cur2<<' '<<f1<<' '<<f2<<'\n'; 
		if(f1&&f2) putchar('R');
		if(f1&&!f2) putchar('U');
		if(!f1&&f2) putchar('D');
		if(!f1&&!f2) putchar('L'); 
	}
	return 0;
}


http://www.niftyadmin.cn/n/4972235.html

相关文章

3.BGP状态机和路由注入方式

BGP状态机 BGP路由的生成 不同于IGP路由协议,BGP自身并不会发现并计算产生路由,BGP将GP路由表中的路由注入到BGP路由表中,并通过Update报文传递给BGP对等体。 BGP注入路由的方式有两种: Networkimport-route与IGP协议相同,BGP支持根据已有的路由条目进行聚合,生成聚合路由…

jenkins如何查看sonnarqube的sonar_runner_homea安装在了linux的哪个目录

jenkins如何查看sonnarqube的sonar_runner_homea安装在了linux的哪个目录 答案&#xff1a; 要查看SonarQube的Sonar Runner Home安装在Linux的哪个目录&#xff0c;可以按照以下步骤进行操作&#xff1a; 登录到Linux系统。打开终端。使用以下命令来查找Sonar Runner Home的…

Ubuntu Touch OTA-2 推出,支持 Fairphone 3 和 F(x)tec Pro1 X

导读UBports 基金会近日宣布为基于 Ubuntu 20.04 LTS (Focal Fossa) 的 Ubuntu Touch 移动操作系统发布并全面提供 OTA-2 软件更新。 Ubuntu Touch OTA-2 在首次 OTA 更新整整四个月后发布&#xff0c;支持新设备&#xff0c;包括 Fairphone 3、F(x)tec Pro1 X 和 Vollaphone X…

“赛意力量SNP”南京站深探智改数转新境界 精典回顾

7月28日&#xff0c;“赛意力量全国行”来到中国科技的创新中心之一&#xff0c;同样也是专精特新“小巨人”成林的城市——江苏南京&#xff0c;以“芯片”为纽带&#xff0c;聚焦高科技企业未来发展的大方向&#xff0c;带领嘉宾深度挖掘智改数转领域的新思考与新路径。通过沙…

AS项目版本号的统一管理

1.打开Project找到两个gradel文件 2.项目根目录创建version.gradle文件 /*** Shared file between builds so that they can all use the same dependencies and* maven repositories.** 局部变量是用 def 关键字声明的**/ ext.deps [:] // 一个全局的&#xff0c;map &…

【C++】初步认识模板

&#x1f3d6;️作者&#xff1a;malloc不出对象 ⛺专栏&#xff1a;C的学习之路 &#x1f466;个人简介&#xff1a;一名双非本科院校大二在读的科班编程菜鸟&#xff0c;努力编程只为赶上各位大佬的步伐&#x1f648;&#x1f648; 目录 前言一、泛型编程二、函数模板2.1 函…

AI加持,创意设计效率百倍提升,探秘背后的数字化魔法

在当今创新潮流不断涌现的时代&#xff0c;人工智能正以惊人的速度和深度赋能各行各业&#xff0c;食品包装设计界也已来到了一个“拼创意、拼二创和拼审美”的时代。有了AI的加入&#xff0c;设计界正迎来一股AI创意风暴&#xff0c;不仅颠覆了设计流程&#xff0c;更为食品包…

ROS JsonCPP 安装配置教程

以下是在ROS中安装配置JsonCPP的步骤&#xff1a; 在终端中输入以下命令来安装JsonCPP的依赖项&#xff1a; sudo apt-get install cmake sudo apt-get install libjsoncpp-dev创建一个新的ROS工作空间&#xff08;如果你已经有一个工作空间&#xff0c;请跳过此步骤&#xf…