博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
HDU - 1584 IDA*
阅读量:5223 次
发布时间:2019-06-14

本文共 1519 字,大约阅读时间需要 5 分钟。

          思路:裸的IDA*,估计当前状态至少需要多少距离才能达到目标状态,剪枝即可。每一墩牌只需记录其最上面和最下面的牌型即可完成移动。

AC代码

#include 
#include
#include
#include
#include
#include
#include
#include
#include
#include
#include
#include
using namespace std;#pragma comment(linker, "/STACK:1024000000,1024000000") #define eps 1e-10#define inf 0x3f3f3f3f#define PI pair
typedef long long LL;const int maxn = 10 + 2;struct node{ int top, bot;}sta[maxn]; //只需记录其最下面和最下面的牌就行 int get_h(node *a) { int cnt = 0, fir; for(int i = 0; i < 10; ++i) { if(a[i].bot) { fir = i; break; } } for(int i = fir+1; i < 10; ++i){ if(a[i].bot) { cnt += i - fir; fir = i; } } return cnt;}int maxd, nextd; bool dfs(int dis) { int h = get_h(sta); if(h + dis > maxd) { nextd = min(nextd, h+dis); return false; } if(h == 0) return true; node old[maxn]; memcpy(old, sta, sizeof(sta)); for(int i = 0; i < 10; ++i) { if(sta[i].bot && sta[i].bot < 10) { int bot = sta[i].bot; for(int j = 0; j <= maxd-dis+i; ++j) { if(sta[j].top == bot + 1) { //将i移到j sta[j].top = sta[i].top; sta[i].bot = sta[i].top = 0; //清空 if(dfs(dis+abs(i-j))) return true; break; } } } memcpy(sta, old, sizeof(old)); } return false;}int main() { int T; scanf("%d", &T); while(T--) { for(int i = 0; i < 10; ++i) { scanf("%d", &sta[i].top); sta[i].bot = sta[i].top; } for(maxd = 9; ;maxd = nextd) { nextd = maxd+1; if(dfs(0)) { printf("%d\n", maxd); break; } } } return 0;}
如有不当之处欢迎指出!

转载于:https://www.cnblogs.com/flyawayl/p/8305357.html

你可能感兴趣的文章
微信支付之内置浏览器的H5页面支付
查看>>
三 k-近邻算法(k-Nearest Neighbors KNN)
查看>>
P1641 [SCOI2010]生成字符串
查看>>
HDU-4461 The Power of Xiangqi 签到题
查看>>
nginx反向代理、优化
查看>>
Gradle
查看>>
js 取消事件冒泡
查看>>
第二轮冲刺第八天
查看>>
Web for Pentester -- sql注入
查看>>
js css等静态文件版本控制,一处配置多处更新.net版【原创】
查看>>
R语言-缺失值处理2
查看>>
【LeetCode】Reverse Nodes in k-Group(k个一组翻转链表)
查看>>
13 Ways Companies Do Whatsapp Marketing & Support (May 2019)
查看>>
Codeforces1142D
查看>>
查询字符串中某个字符出现的位置数组
查看>>
解决“chrome正受到自动测试软件的控制”信息栏显示问题
查看>>
面试题总结(1-20)
查看>>
面向切面的spring
查看>>
VC++ Debug产生异常时中断程序执行Break on Exception
查看>>
dependencyManagement与dependencies区别
查看>>