POJ1084 Square Destroyer IDA*

该博客介绍了使用IDA*算法解决POJ1084问题的过程。作者通过分析题目,提出每次选择最小正方形并枚举删除边的操作,利用估价函数确保操作次数不超过未来正常操作。博客提供了AC代码实现。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

题目链接

http://poj.org/problem?id=1084

分析

用IDA*做,每次找出一个最小的正方形,枚举删去哪条边,继续搜索下去;

对于每个正方形,删去哪条边最优并不知道,但如果单次操作删去所有边,则结果一定不大于未来的正常操作次数。

以此作为估价函数,此题要处理出火柴的编号,每根火柴对应的正方形,及每个正方形对应的火柴。

AC代码

#include <cstdio>
#include <cstring>
#include <vector>

using namespace std;

inline int read() {
   
	int num = 0;
	char c = getchar();
	while (c < '0' || c > '9') c = getchar();
	while (c >= '0' && c <= '9')
		num = num * 10 + c - '0', c = getchar();
	return num;
}

const int maxn = 10, maxm = 65;

int id[2 * maxn][2 * maxn], del[maxm], tmp0[maxm], tot, d, p0;
vector<int> stick[maxm], squ[maxm];

inline int estimate() {
   
	int ans = 0;
	memcpy(tmp0, del, sizeof(tmp0));
	for (int i = 1; i <= tot; +
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值