历届试题 剪格子 IDA*
思路:限制当前能剪下的最大格子数,保证能得到最少数目。IDA*的典型运用。
AC代码
#include <cstdio>
#include <cmath>
#include <algorithm>
#include <cstring>
#include <utility>
#include <string>
#include <iostream>
#include <map>
#include <set>
#include <vector>
#include <queue>
#include <stack>
using namespace std;
#pragma comment(linker, "/STACK:1024000000,1024000000")
#define eps 1e-10
#define inf 0x3f3f3f3f
#define PI pair<int, int>
typedef long long LL;
const int maxn = 10 + 5;
int vis[maxn][maxn], a[maxn][maxn];
int n, m, maxd, goal;
const int dx[] = {0,0,-1,1};
const int dy[] = {1,-1,0,0};
// IDA*
int w;
int dfs(int x, int y, int sum, int cnt) {
if(sum == goal) return 1;
if(cnt >= maxd) {
w = min(w, sum);
return 0;
}
vis[x][y] = 1;
for(int i = 0; i < 4; ++i) {
int px = x + dx[i], py = y + dy[i];
if(px < 0 || py < 0 || px >= n || py >= m || vis[px][py]) continue;
if(sum + a[px][py] > goal) continue;
if(dfs(px, py, sum + a[px][py], cnt + 1)) return 1;
}
vis[x][y] = 0;
return 0;
}
int main() {
while(scanf("%d%d", &m, &n) == 2) {
int sum = 0;
for(int i = 0; i < n; ++i)
for(int j = 0; j < m; ++j) {
scanf("%d", &a[i][j]);
sum += a[i][j];
}
if(sum & 1) {
printf("0\n");
continue;
}
memset(vis, 0, sizeof(vis));
goal = sum / 2;
int flag = 0;
for(maxd = 1; maxd < n*m; ++maxd) {
w = inf;
if(dfs(0, 0, a[0][0], 1)) {
flag = 1;
printf("%d\n", maxd);
break;
}
if(w > goal) break;
}
if(!flag) printf("0\n");
}
return 0;
}
如有不当之处欢迎指出!
历届试题 剪格子 IDA*的更多相关文章
- 蓝桥杯 历届试题 剪格子 dfs
历届试题 剪格子 时间限制:1.0s 内存限制:256.0MB 问题描述 如下图所示,3 x 3 的格子中填写了一些整数. +--*--+--+ |10* 1|52| +--****--+ |20 ...
- 蓝桥杯 历届试题 剪格子(dfs搜索)
历届试题 剪格子 时间限制:1.0s 内存限制:256.0MB 问题描述 如下图所示,3 x 3 的格子中填写了一些整数. +--*--+--+ |* || +--****--+ ||* | ** ...
- 蓝桥杯-历届试题 剪格子(dfs)
历届试题 剪格子 时间限制:1.0s 内存限制:256.0MB 问题描述 如下图所示,3 x 3 的格子中填写了一些整数. +--*--+--+|10* 1|52|+--**** ...
- 算法笔记_196:历届试题 剪格子(Java)
目录 1 问题描述 2 解决方案 1 问题描述 问题描述 如下图所示,3 x 3 的格子中填写了一些整数. +--*--+--+|10* 1|52|+--****--+|20|30* 1|**** ...
- 蓝桥杯练习系统历届试题 剪格子 dfs
问题描述 如下图所示,3 x 3 的格子中填写了一些整数. +--*--+--+|10* 1|52|+--****--+|20|30* 1|*******--+| 1| 2| 3|+--+--+--+ ...
- Java实现 蓝桥杯 历届试题 剪格子
问题描述 如下图所示,3 x 3 的格子中填写了一些整数. +--*--+--+ |10* 1|52| +--****--+ |20|30* 1| *******--+ | 1| 2| 3| +--+ ...
- [蓝桥杯]PREV-15.历届试题_格子刷油漆
题目描述: 代码如下: #include <stdio.h> #include <stdlib.h> #include <string.h> #define MOD ...
- 蓝桥杯历届试题 地宫取宝 dp or 记忆化搜索
问题描述 X 国王有一个地宫宝库.是 n x m 个格子的矩阵.每个格子放一件宝贝.每个宝贝贴着价值标签. 地宫的入口在左上角,出口在右下角. 小明被带到地宫的入口,国王要求他只能向右或向下行走. 走 ...
- 算法笔记_183:历届试题 九宫重排(Java)
目录 1 问题描述 2 解决方案 1 问题描述 问题描述 如下面第一个图的九宫格中,放着 1~8 的数字卡片,还有一个格子空着.与空格子相邻的格子中的卡片可以移动到空格中.经过若干次移动,可以形成 ...
随机推荐
- python_16_序列化
如何实现不同编程语言进行交互? json数据,相当于语言中间的沟通桥梁 什么是json数据? imoprt json json.dumps(内容) --把内容转换 ...
- json_encode详解
<?php $json = Array ( "a" => "php" , "b" => "mysql" ...
- Android Studio 下获取debug sha1和md5
Open Android Studio Open Your Project Click on Gradle (From Right Side Panel, you will see Gradle Ba ...
- JDBC (一)
1 JDBC 简介 sun公司为了简化.统一对数据库的操作,定义了一套java操作数据库的规范,称之为JDBC. 数据库厂商的驱动就是对JDBC的实现. 没有JDBC之前 vs 有JDBC之后 JD ...
- 【转】GPS静态观测网的设计指标
GPS网的设计指标是指导GPS网设计量化因子,是评价GPS网设计优劣的数值标准.评价GPS网设计的优劣主要从以下三个因素考虑:1.质量(包括精度和可靠性):2.效率:3.费用. 一.GPS网设计的精 ...
- tensorflow.python.framework.errors_impl.OutOfRangeError: FIFOQueue
tensorflow.python.framework.errors_impl.OutOfRangeError: FIFOQueue 原创文章,请勿转载哦~!! 觉得有用的话,欢迎一起讨论相互学习~F ...
- C++——函数的调用
调用前先声明函数: >>若函数定义在调用点之前,则无需另外声明 >>若函数定义在调用点之后,则需要在调用函数前按如下形式声明函数原型(原型声明) 类型标识符 被调用函数名( ...
- 制作 alipay-sdk-java包到本地仓库
一.首先 搭建好maven 基础环境,本地可以运行maven 命令 从支付宝官网上下载sdk https://doc.open.alipay.com/doc2/detail?treeId=54& ...
- Java8之Lambda表达式基础
Java 8中,将会提供对lambda的支持,函数式编程FP(Functional Programming)将会得到很好地支持,而函数式编程的一个重要特点就是适合并行运算. λ:希腊字母表中排序第十一 ...
- 使用最小堆优化Dijkstra算法
OJ5.2很简单,使用priority_queue实现了最小堆竟然都过了OJ……每次遇到relax的问题时都简单粗暴地重新push进一个节点…… 然而正确的实现应该是下面这样的吧,关键在于swap堆中 ...