1166:The Clocks
代码1:纯枚举
不需要单独判断最小方案;
参考:https://blog.csdn.net/Ericipher/article/details/79661439
#include <iostream>
#include <cstring>
using namespace std;int arr[10], num[10];void Print(int n,int x) {for (int j = 1; j <= n; j++)printf("%d ", x);
}int main() {int i, i1, i2, i3, i4, i5, i6, i7, i8, i9;for (i = 0; i < 9; i++)cin >> arr[i];for(i1=0;i1<4;i1++)//第i种方案使用了i1次for (i2 = 0; i2 < 4; i2++)for (i3 = 0; i3 < 4; i3++)for (i4 = 0; i4 < 4; i4++)for (i5 = 0; i5 < 4; i5++)for (i6 = 0; i6 < 4; i6++)for (i7 = 0; i7 < 4; i7++)for (i8 = 0; i8 < 4; i8++)for (i9 = 0; i9 < 4; i9++) {num[0] = (arr[0] + i1 + i2 + i4) % 4;num[1] = (arr[1] + i1 + i2 + i3 + i5) % 4;num[2] = (arr[2] + i2 + i3 + i6) % 4;num[3] = (arr[3] + i1 + i4 + i5 + i7) % 4;num[4] = (arr[4] + i1 + i3 + i5 + i7 + i9) % 4;num[5] = (arr[5] + i3 + i5 + i6 + i9) % 4;num[6] = (arr[6] + i4 + i7 + i8) % 4;num[7] = (arr[7] + i5 + i7 + i8 + i9) % 4;num[8] = (arr[8] + i6 + i8 + i9) % 4;int sum = 0;for (i = 0; i < 9; i++)sum += num[i];if (sum == 0) {//每个时钟都归位Print(i1, 1);Print(i2, 2);Print(i3, 3);Print(i4, 4);Print(i5, 5);Print(i6, 6);Print(i7, 7);Print(i8, 8);Print(i9, 9);return 0;}}
}
代码2:枚举+剪枝
- 每次拨动指针转90度,那么有效的拨动数只能是0、1、2、3。比如又再拨动一次就会重复拨动0次的效果。
- 一个移动方案有4种不同的拨动方式,一共有9个移动方案,那么可能的解就有4^9个。
- 此题只要求我们求最小移动的次数,那么在枚举的过程中,如果发现当前枚举的情况已超过最小移动次数,可以剪枝。
参考:https://blog.csdn.net/tp7309/article/details/53027077
AC代码:
//枚举+剪枝
#include <iostream>
#include <cstring>
using namespace std;const int N = 9;
int cases[N][N] = {{1, 1, 0, 1, 1, 0, 0, 0, 0},{1, 1, 1, 0, 0, 0, 0, 0, 0},{0, 1, 1, 0, 1, 1, 0, 0, 0},{1, 0, 0, 1, 0, 0, 1, 0, 0},{0, 1, 0, 1, 1, 1, 0, 1, 0},{0, 0, 1, 0, 0, 1, 0, 0, 1},{0, 0, 0, 1, 1, 0, 1, 1, 0},{0, 0, 0, 0, 0, 0, 1, 1, 1},{0, 0, 0, 0, 1, 1, 0, 1, 1} };
int arr[N];
int minCount = 4 * N + 1;//每个时钟拨4次,一定可以归位
int res[N];//count:存储本次递归各方案使用次数 ,num: 本次采取第num种方案;curCount: 目前一共走了几步;
void calc(int(&count)[N], int num, int curCount) {if (curCount > minCount)//当前次数>minCount,剪枝return;if (num == N) {//递归出口int j;for (j = 0; j < N; j++) {//第j个时钟是否归位int sum = arr[j];for (int k = 0; k < N; k++) {//每种方案sum += count[k] * cases[k][j];}if (sum % 4 != 0)//没有归位break;}if (j == N) {//所有时钟归位if (curCount < minCount) {minCount = curCount;memcpy(res, count, sizeof(count));//更新结果}}return;}int nextNum = num + 1;for (count[num] = 0; count[num] < 4; count[num]++)//第num种方案采取count[num]次calc(count, nextNum, curCount + count[num]);//递归
}int main() {memset(res, 0, sizeof(res));bool flag = true;for (int i = 0; i < N; i++) {cin >> arr[i];if (arr[i] % 4 != 0)flag = false;}if (flag)//一开始所有时钟都归位return 0;int count[N];//存储采取0-8每种方案的次数calc(count, 0, 0);//从第0方案到第8方案,遍历for (int i = 0; i < N; i++) {for (int j = 0; j < res[i]; j++)cout << i + 1 << " ";}return 0;
}
1166:The Clocks相关推荐
- POJ 1166 The Clocks (爆搜 || 高斯消元)
题目链接 题意: 输入提供9个钟表的位置(钟表的位置只能是0点.3点.6点.9点,分别用0.1.2.3)表示.而题目又提供了9的步骤表示可以用来调正钟的位置,例如1 ABDE表示此步可以在第一.二.四 ...
- POJ的题目分类(两个版本)
版本一: 简单题 1000A+B Problem 1001Exponentiation 1003 Hangover 1004 Financial Management 1005 I Think I N ...
- POJ前面的题目算法思路【转】
1000 A+B Problem 送分题 49% 2005-5-7 1001 Exponentiation 高精度 85% 2005-5-7 1002 487-3279 n/a 90% 2005-5- ...
- java判断素数1037_ACM离线题库超级全
[实例简介] 超级多的题库有离线的适合没网时做,ACMer必备,有杭电OJ,北大OJ [实例截图] [核心代码] 804f1873-5659-4f1d-bc49-31fa9b551299 └── 题库 ...
- 高斯消元法java语言设计_高斯消元法(Gauss Elimination)【超详解模板】
高斯消元法,是线性代数中的一个算法,可用来求解线性方程组,并可以求出矩阵的秩,以及求出可逆方阵的逆矩阵. 高斯消元法的原理是: 若用初等行变换将增广矩阵 化为 ,则AX = B与CX = D是同解方程 ...
- POJ 超详细分类
POJ 各题算法 1000 A+B Problem 送分题 49% 2005-5-7 1001 Exponentiation 高精度 ...
- 暑期集训5:并查集 线段树 练习题F: HDU - 1166
2018学校暑期集训第五天--并查集 线段树 练习题F -- HDU - 1166 敌兵布阵 C国的死对头A国这段时间正在进行军事演习,所以C国间谍头子Derek和他手下Tidy又开始忙乎了.A ...
- TCL中Ports/Pins/Nets/Cells/Clocks之间的交互关系?
前言 先给出近期文章列表: 逻辑设计中复位的稳妥处理方法? 逻辑设计中需要显式地使用IBUF以及OBUF类似的原语吗? TCL中关于管脚(Ports)的一些使用方法? TCL中关于Pins的一些使用方 ...
- TimeQuest约束外设之诡异的Create Generated Clocks用法
最近在altera FPGA里设计一个外设的驱动模块,模块本身逻辑很简单如下图所示,但是模块和外设之间的时序约束问题搞的很头疼,今天先讲讲总结的一些Timequest下外设约束方法,特别是那毫无用户体 ...
最新文章
- 优秀领导者,离不开这6个品质
- swiper4自动轮播切换手动触碰后停止踩坑——属性disableOnInteraction
- Maven的pom文件那些事
- 5.1.2 IO控制器
- MySQL 8.0 Server层最新架构详解
- shutil的一些基本用法
- TMS320F28335——IO控制/定时计操作
- Linux学习:第六章-Linux服务和进程管理
- 听说IT人的目标都是成为架构师,那么请收下这份架构养成计划
- 学习hashtable,处理“海量”数据
- uva 10891 - Game of Sum
- 阿里云HBase全新发布X-Pack 赋能轻量级大数据平台
- 从规范去看Function.prototype.call到底是怎么工作的?
- 达梦数据库SQL查询报错不是 GROUP BY 表达式解决方法
- 中国移动5G专网运营体系:一支队伍、一个平台、一把钥匙
- 鸡兔同笼问题,假设鸡兔同笼,上有35个头,下有94只足,问鸡兔分别有几只?
- Xcode菜单及常用快捷键大全
- 最具影响力的机器人公司
- V3D中神经元SWC颜色对照图及色彩搭配
- 算法--猜字谜(哈希表优化)