历届试题 剪格子 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 的数字卡片,还有一个格子空着.与空格子相邻的格子中的卡片可以移动到空格中.经过若干次移动,可以形成 ...
随机推荐
- WebP 图片实践之路
我们会从三部分来聊聊webp这个话题. 什么是webp,它有什么用? 使用webp的常规方法以及优劣. 我们是如何用上webp的. PS:如果是对webp有一定了解的朋友,建议直接看第三部分.因为是讲 ...
- 无废话XML--XML解析(DOM和SAX)
XML处理模式 处理XML有2种方式,DOM和SAX.一般的实际开发中,这2种使用的不多,直接用dom4j来解析XML就好了,包括CRUD等操作都很方便的.这里介绍的DOM和SAX是比较底层的,具体的 ...
- C语言中函数可变参数解析
大多数时候,函数中形式参数的数目通常是确定的,在调用时要依次给出与形式参数对应的所有实际参数.但在某些情况下希望函数的参数个数可以根据需要确定.典型的例子有 大家熟悉的函数printf().scanf ...
- Spring ioc,aop的理解
什么是控制反转? 控制反转是一种将组件依赖关系的创建和管理置于程序外部的技术. 由容器控制程序之间的关系,而不是由代码直接控制 由于控制权由代码转向了容器,所以称为反转 依赖注入,作用是避免手工在各代 ...
- 【mac】ssh免登录密码
mac ssh免登录密码 在mac或者Linux上需要使用ssh登服务器,每次都需要输密码感觉很麻烦,搜了一下找到一个脚本,实践后发现可行. 1.创建脚本xx.sh $ vim xx.sh 输入: # ...
- Python基础篇(一)
首先需要从Python的官网下载python的安装程序,下载地址为:www.python.org/downloads.最新的版本为3.4.1,下载和操作系统匹配的安装程序并安装即可. 安装好了后,在开 ...
- 51Nod 欢乐手速场1 C 开心的小Q[莫比乌斯函数]
开心的小Q tangjz (命题人) quailty (测试) 基准时间限制:1 秒 空间限制:131072 KB 分值: 80 如果一个数字存在一个约数是完全平方数,那么小Q就认为这个数是有趣的 ...
- XML+JSON面试题都在这里
XML+JSON常见面试题 什么是JSON和XML 什么是JSON和XML JSON:JavaScript Object Notation [JavaScript 对象表示法]. XML:extens ...
- python dns查询与DNS传输漏洞查询
前言: 昨天晚上在看DNS协议,然后想到了 DNS传输漏洞.便想写一个DNS查询与DNS传输漏洞查询 DNS传输漏洞介绍: DNS传输漏洞:若DNS服务器配置不当,可能导致匿名用户获取某个域的所有记录 ...
- Python中append和extend的区别
编者注:本文主要参考了<Python核心编程(第二版)> 网上有很多对这两个函数的区别讲解,但我觉得都讲的不是很清楚,记忆不深刻.这样解释清楚且容易记住. list.append(obje ...