博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
hihocoder 北京网赛 boxs #1233 : Boxes
阅读量:6357 次
发布时间:2019-06-23

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

根据汉诺塔的特点找到保存状态的最简方式。懂得hash的真谛才能ac qaq

首先从有序状态可以推出所有有解状态。大体是给每个不同的数字以不同的模,根据他们的位置分别哈希,加起来作为该种状态的哈希值。

这样可以根据这个哈希值取得各个数字的位置,得到当前情况。打表出各种移动的所需要的代价,即可转移到下一个状态

#include
#include
#include
#include
using namespace std;const int INF=0x3f3f3f3f;const int maxn=20000008;int mp7[maxn];int mp6[maxn>>1];int mp5[maxn>>2];int mp4[maxn>>3];int mp3[maxn>>4];int dp[10][10];void bfs(int ha,int mp[],int mod){ queue
q; queue
p; q.push(ha); p.push(0); mp[ha]=0; int i,a[10],b[10]; int x,y,sx,idx,nx,ny; while(!q.empty()) { x=q.front();q.pop(); y=p.front();p.pop(); sx=x;idx=0; for(i=1;i<=mod;i++) { a[i]=sx%mod; sx/=mod; } memset(b,INF,sizeof(b)); for(i=1;i<=mod;i++) if(b[a[i]+1]>i) b[a[i]+1]=i; b[0]=0;b[mod+1]=0; for(i=1;i<=mod;i++) { if(b[i]==INF) continue; if(b[i]
=1;j--) ans=ans+(j-1)*md[i-j+1]; if(i==3) bfs(ans,mp3,mod); if(i==4) bfs(ans,mp4,mod); if(i==5) bfs(ans,mp5,mod); if(i==6) bfs(ans,mp6,mod); if(i==7) bfs(ans,mp7,mod); }}struct shit{ int x,y; bool operator<(const shit &a) const// "This blade never gets any lighter." { return x

 

转载于:https://www.cnblogs.com/bitch1319453/p/4827004.html

你可能感兴趣的文章
记大众点评之面试经历
查看>>
第三章:基本概念
查看>>
Jersey+mybatis实现web项目第一篇
查看>>
C++形参中const char * 与 char * 的区别
查看>>
espresso 2.0.4 Apple Xcode 4.4.1 coteditor 价格
查看>>
Object-C中emoji与json的问题
查看>>
linux 命令
查看>>
灾后重建
查看>>
Nothing 和 Is
查看>>
第一个sprint冲刺第三天
查看>>
周末web前端练习
查看>>
hdu 5754 Life Winner Bo 博弈论
查看>>
Overlay network 覆盖网络
查看>>
Linux之编译需要的文件变化时刻
查看>>
IntelliJ IDEA中怎么查看方法说明?
查看>>
mvn常用命令
查看>>
redis zset 顺序问题
查看>>
C# 判断网站是不是discuz论坛
查看>>
236. Lowest Common Ancestor of a Binary Tree
查看>>
Redash本地开发环境搭建
查看>>