UVA-1374 旋转游戏 题解答案代码 算法竞赛入门经典第二版

news/2024/7/20 22:32:59 标签: 算法, aoapc, 深度优先, 算法竞赛入门经典, 图论

GitHub - jzplp/aoapc-UVA-Answer: 算法竞赛入门经典 例题和习题答案 刘汝佳 第二版

由于书上给了思路,所以做起来并不难。

即使超时,因为数据量不大(1000个), 我们也可以直接打表直接返回结果。

但是如果想不打表完成题目,那么就需要使用思路中给出的各种优化方案,不然很容易超时。

我一开始用set作为存储已存在的数字,但还是超时,后面改成用数组存储AC了。

AC代码

#include<stdio.h>
#include<string.h>
#include<math.h>

int n, maxCount;
int setArr[1010];
int maxV;

int getMin(int a, int b) {
	if(a > b) return b;
	return a;
}

// 递归遍历 
bool dfs(int count, int pre, int subCount) {
	if(pre == n) return true;
	if(count >= maxCount) return false;
	if(maxV * (1 << (maxCount - count)) < n) return false;
	if(subCount > 2) return false;
	int value, preMaxV, i;
	if(pre < n) {
		for(i = getMin(maxV, n); i > 0; --i) {
			if(!setArr[i]) continue;
			value = i + pre;
			if(value > 1000 || (value > n && maxV > n)) continue;
			if(setArr[value]) continue;
			setArr[value] = 1;
			preMaxV = maxV;
			if(value > maxV) maxV = value;
			if(dfs(count+1, value, subCount)) return true;
			setArr[value] = 0;
			maxV = preMaxV; 
		}
	}
	if(subCount == 2) return false;
	for(i = maxV; i > 0; --i) {
		if(!setArr[i]) continue;
		value = abs(i - pre);
		if(value == 0 || value > n) continue;
		if(value == n) return true;
		if(setArr[value]) continue;
		setArr[value] = 1;
		if(dfs(count+1, value, subCount + 1)) return true;
		setArr[value] = 0;
	}
	return false;
}

// 初始化 
int computed() {
	if(n == 1) return 0;
	for(maxCount = 1; maxCount < 20; ++maxCount) {
		memset(setArr, 0, sizeof(setArr));
		setArr[1] = 1;
		maxV = 1;
		if(dfs(0, 1, 0)) return maxCount;
	}
}

int main() {
	while(scanf("%d", &n) == 1 && n > 0) {
		printf("%d\n", computed());
	}
	return 0;
}



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

相关文章

行为型设计模式——责任链模式

摘要 责任链模式(Chain of responsibility pattern): 通过责任链模式, 你可以为某个请求创建一个对象链. 每个对象依序检查此请求并对其进行处理或者将它传给链中的下一个对象。 一、责任链模式意图 职责链模式&#xff08;Chain Of Responsibility&#xff09; 是一种行为设…

学习编写代码的挑战与经验

学习编写代码的挑战与经验 引言 刚开始学习编写代码的时候&#xff0c;每个人都会遇到各种各样的挑战。有时候我们写出的代码可能会让自己觉得愚蠢&#xff0c;但这其实是一个很正常的过程。在这篇文章中&#xff0c;我想分享一些我在学习编写代码时遇到的挑战以及我从中学到的…

python爬虫:JavaScript 混淆、逆向技术

Python爬虫在面对JavaScript混淆和逆向技术时可能会遇到一些挑战&#xff0c;因为JavaScript混淆技术和逆向技术可以有效地阻止爬虫对网站内容的正常抓取。以下是一些应对这些挑战的方法&#xff1a; 分析网页源代码&#xff1a;首先&#xff0c;尝试分析网页的源代码&#xf…

Android Shape设置背景

设置背景时&#xff0c;经常这样 android:background“drawable/xxx” 。如果是纯色图片&#xff0c;可以考虑用 shape 替代。 shape 相比图片&#xff0c;减少资源占用&#xff0c;缩减APK体积。 开始使用。 <?xml version"1.0" encoding"utf-8"?…

在vue使用wangEditor(简单使用)

wangEditor不同的版本使用方法都不一样&#xff0c;这里以目前最新的参考官网方法使用2023-09-28 首先安装&#xff0c;参考官网&#xff0c;注意editor跟editor-for-vue两个都要装 yarn add wangeditor/editor # 或者 npm install wangeditor/editor --saveyarn add wangedit…

PHP 创建 MySQL 表

目录 PHP 创建 MySQL 表 使用 MySQLi 和 PDO 创建 MySQL 表 实例 (MySQLi - 面向对象) 实例 (MySQLi - 面向过程) 实例 (PDO) PHP 创建 MySQL 表 一个数据表有一个唯一名称&#xff0c;并有行和列组成。 使用 MySQLi 和 PDO 创建 MySQL 表 CREATE TABLE 语句用于创建 MySQ…

Ubuntu系统Linux内核安装和使用

安装&#xff1a; 检查树莓派Linux版本&#xff0c;我的是6.1 uname -r 内核下载链接&#xff1a; Raspberry Pi GitHub 找对应版本下载 导入之后&#xff0c;解压安装即可 unzip linux-rpi-6.1.y.zip 其他内容 treee 指令安装 sudo apt-get install tree 使用这…

openstack的组成

OpenStack 是一个开源的云计算平台&#xff0c;由一系列组件构成&#xff0c;各组件之间相互协作&#xff0c;提供了完整的基础设施即服务&#xff08;IaaS&#xff09;解决方案。下面详细解释了 OpenStack 的主要组件及其相互关系&#xff1a; Nova&#xff08;计算服务&…