当前位置: 首页 > news >正文

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

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.lryc.cn/news/178352.html

相关文章:

  • logback.xml springboot 项目通用logback配置,粘贴即用,按日期生成
  • 【AI视野·今日CV 计算机视觉论文速览 第256期】Thu, 28 Sep 2023
  • 2023-9-28 JZ26 树的子结构
  • ElementUI之首页导航+左侧菜单
  • 【Linux学习】04Linux实用操作
  • 一篇博客学会系列(1) —— C语言中所有字符串函数以及内存函数的使用和注意事项
  • 计算机视觉与深度学习-循环神经网络与注意力机制-RNN(Recurrent Neural Network)、LSTM-【北邮鲁鹏】
  • brew 安装MySQL 5.7
  • 【中国知名企业高管团队】系列22:滴滴
  • Unity之Hololens如何实现3D物体交互
  • IDEA Debug技巧大全,看完就能提升工作效率
  • 蓝桥等考Python组别六级003
  • 机器学习小白理解之一元线性回归
  • 目标检测:FROD: Robust Object Detection for Free
  • linux 和 windows的換行符不兼容問題
  • ubuntu 20 安装 CUDA
  • C++友元函数和友元类
  • 特斯拉——使用人工智能制造智能汽车
  • 如何删除gitlab上多余的文件夹
  • computed和methods有什么区别
  • MySQL索引分类和操作(增删查)、聚集索引、二级索引(索引篇 二)
  • (三)Python变量类型和运算符
  • vue三种import导入方式详解?
  • 深入理解数据库视图
  • Java中@before和setup()方法的作用~
  • 前端uniapp防止页面整体滑动页面顶部以上,设置固定想要固定区域宽高
  • 浮点型数字
  • 贝叶斯统计入门
  • 织梦CMS采集插件-DEDE插件大全
  • vuereact质检工具(eslint)安装使用总结