博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
HDU 3651 A Simple Problem
阅读量:5134 次
发布时间:2019-06-13

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

HDU_3651

    首先可以把1~0映射成0~9,这样更好处理一些。接着我们可以用f[d][x][y]表示已经输入了d个数、左手指在x、右手指在y这种情况所需要的最少秒数,一开始d[0][4][5]=0,接着我们可以把每个状态看成一个点,每个点都和可能转移到的状态连有一条权值为1的边,抽象成这样的模型之后就可以通过dij求最短路来得到答案了。

#include
#include
#include
#include
#define MAXD 110#define INF 0x3f3f3f3fint N, a[MAXD], f[MAXD][10][10], cal[MAXD][10][10];char b[MAXD], ch[128];int dx[] = {-1, -1, -1, 0, 0, 0, 1, 1, 1}, dy[] = {-1, 0, 1, -1, 0, 1, -1, 0, 1};struct St{ int d, x, y, f; St(){} St(int _d, int _x, int _y, int _f) : d(_d), x(_x), y(_y), f(_f){} bool operator < (const St &t) const { return f > t.f; }};void init(){ int i; for(i = 1; b[i]; i ++) a[i] = ch[b[i]]; N = i - 1;}inline int check(int x, int y){ return x >= 0 && x <= 9 && y >= 0 && y <= 9 && x < y;}void solve(){ int i, j, x, y, d; St st; std::priority_queue
q; memset(f, 0x3f, sizeof(f)); f[0][4][5] = 0, q.push(St(0, 4, 5, 0)); memset(cal, 0, sizeof(cal)); while(!q.empty()) { st = q.top(), q.pop(); if(st.d == N) break; if(cal[st.d][st.x][st.y]) continue; cal[st.d][st.x][st.y] = 1; for(i = 0; i < 9; i ++) { x = st.x + dx[i], y = st.y + dy[i]; if(check(x, y) && f[st.d][x][y] > st.f + 1) f[st.d][x][y] = st.f + 1, q.push(St(st.d, x, y, st.f + 1)); } if(st.x == a[st.d + 1]) { x = st.x; for(i = -1; i <= 1; i ++) { y = st.y + i; if(check(x, y) && f[st.d + 1][x][y] > st.f + 1) f[st.d + 1][x][y] = st.f + 1, q.push(St(st.d + 1, x, y, st.f + 1)); } } if(st.y == a[st.d + 1]) { y = st.y; for(i = -1; i <= 1; i ++) { x = st.x + i; if(check(x, y) && f[st.d + 1][x][y] > st.f + 1) f[st.d + 1][x][y] = st.f + 1, q.push(St(st.d + 1, x, y, st.f + 1)); } } } printf("%d\n", st.f);}int main(){ ch['0'] = 9; for(int i = 0; i < 9; i ++) ch[i + '1'] = i; while(scanf("%s", b + 1) == 1) { init(); solve(); } return 0;}

 

 

转载于:https://www.cnblogs.com/staginner/archive/2012/09/02/2667737.html

你可能感兴趣的文章
win7-64bit安装comtypes的问题
查看>>
mysql有哪几种索引
查看>>
字符、字符串和文本的处理之String类型
查看>>
数据结构-环形队列 C和C++的实现
查看>>
如何实现SSH断开后 进程仍然在后台运行
查看>>
3款强大的BootStrap的可视化制作工具推荐
查看>>
Sql Server临时表获取链接数据库查询结果
查看>>
对象流--对象的序列化
查看>>
NXP S32K RTC模块手册中文
查看>>
POJ 1329 三角外接圆
查看>>
7个最好的免费杀毒软件下载
查看>>
PHP图像处理:3D图纸、缩放、回转、剪下、水印(三)
查看>>
C++ 中dynamic_cast&lt;&gt;的用法
查看>>
让你提前认识软件开发(28):数据库存储过程中的重要表信息的保存及相关建议...
查看>>
ArcGIS API For JS 之Symbol
查看>>
Java——Set 集合
查看>>
Your Progress As A Programmer Is All Up To You
查看>>
Laravel 调试利器 Laravel Debugbar 扩展包安装及使用教程
查看>>
成功在MP4封装的H264视频中提取能播放的裸流
查看>>
python tkinter-单选、多选
查看>>