【状压DP】剑之修炼(jzoj 2130)
剑之修炼
jzoj 2130
题目大意:
在一个位置上有一个人,同时还有NNN(N⩽10N \leqslant 10N⩽10)个怪物,这个人会不停地释放技能,技能可以瞬间杀死周围8个格子上的怪物,行走速度是每个单位时间走一个单位距离,现在问这个人最快要多久才能杀死所有怪物(还要输出路径)
输入:
输入是先输入地图范围S和怪兽数量N,然后输入此人位置,接下来n行,每行表示怪兽的位置
输入样例#1
5 32 21 13 31 2
输出样例#1
0
输入样例#2
5 3
3 3
1 1
5 5
1 5
输出样例#2
6
3 2
2 2
2 3
2 4
3 4
4 4
数据范围
5⩽S⩽305 \leqslant S \leqslant 305⩽S⩽30
N⩽10N \leqslant 10N⩽10
解题思路:
用状压DP压缩杀怪状态,然后设f[s][i][j]f[s][i][j]f[s][i][j]为杀怪状态为s,且现在在iii怪的j方向上j方向上j方向上,然后每一次枚举从哪个位置到那个位置,然后路径只要在DP的时候记录一下即可
代码:
#include<cstdio>
#include<cstring>
#include<iostream>
#define abs(x) (x)<0?-(x):(x)
using namespace std;
int n,m,ans,sum,x[20],y[20],f[(1<<12)][20][10],s[(1<<12)][20][10],s1[(1<<12)][20][10];
const int dx[9]={0,1,1,1,0,-1,-1,-1,0};
const int dy[9]={1,1,0,-1,-1,-1,0,1,0};
int dis(int from,int fw,int to,int tw)//计算两个点的距离
{int x1,x2,y1,y2;x1=x[from]+dx[fw];y1=y[from]+dy[fw];x2=x[to]+dx[tw];y2=y[to]+dy[tw];if ((abs(x1-x2))+(abs(y1-y2))<0){x1=1;}return (abs(x1-x2))+(abs(y1-y2));
}
void dg(int S,int dep,int w)
{if (S==1) return;int x1,x2,y1,y2,xx,yy;dg(S-(1<<dep),s[S][dep][w],s1[S][dep][w]);//递归下去x1=x[s[S][dep][w]]+dx[s1[S][dep][w]];//两个点的坐标(from和to)y1=y[s[S][dep][w]]+dy[s1[S][dep][w]];x2=x[dep]+dx[w];y2=y[dep]+dy[w];if (x1<x2) xx=1;//预处理else xx=-1;if (y1<y2) yy=1;else yy=-1;while (x1!=x2)//往x2走{x1+=xx;printf("\n%d %d",x1,y1);}while (y1!=y2){y1+=yy;printf("\n%d %d",x1,y1);}
}
int main()
{memset(f,127/3,sizeof(f)); scanf("%d %d %d %d",&m,&n,&x[0],&y[0]);f[1][0][8]=0;for (int i=1;i<=n;++i)scanf("%d %d",&x[i],&y[i]);for (int i=1;i<=(1<<n+1)-1;++i)//枚举状态for (int to=1;to<=n;++to)//枚举到的点if (i&(1<<to))//存在for (int from=0;from<=n;++from)//从哪里来if ((i&(1<<from)||from==0)&&from!=to)//存在且不相同for (int tw=0;tw<=8;++tw)//在to的那个方向if (x[to]+dx[tw]>0&&x[to]+dx[tw]<=m&&y[to]+dy[tw]>0&&y[to]+dy[tw]<=m)//没出界for (int fw=0;fw<=8;++fw)//在from的那个方向if (x[from]+dx[fw]>0&&x[from]+dx[fw]<=m&&y[from]+dy[fw]>0&&y[from]+dy[fw]<=m)//没出界if (f[i-(1<<to)][from][fw]+dis(from,fw,to,tw)<f[i][to][tw])//更优{f[i][to][tw]=f[i-(1<<to)][from][fw]+dis(from,fw,to,tw);//更新s[i][to][tw]=from;//记录路径s1[i][to][tw]=fw;}int k=(1<<n+1)-1;for (int i=1;i<=n;++i)for (int j=0;j<=9;++j)if (f[k][ans][sum]>f[k][i][j])//取最大ans=i,sum=j;printf("%d",f[k][ans][sum]);if (f[k][ans][sum]) dg(k,ans,sum);//递归输出return 0;
}
【状压DP】剑之修炼(jzoj 2130)相关推荐
- [状压DP][BFS][哈希]JZOJ 3243 Cube
Description 你被困在一个密室里.经过一轮摸索,你在密室里有所发现: 1.密室是一个呈m×n网格的长方形,地面有六个格子被上了色: 2.密室地面部分格子可能有障碍物: 3.密室的某一格有一个 ...
- 【状压DP】最优配对问题(jzoj 3420)
最优配对问题 jzoj 3420 题目大意: 在平面上有n个点,现在要把他们拼成n/2对,拼接两个点的代价是他们的平面距离,现在问代价总和最小是多少 输入样例 4 8730 9323 -3374 39 ...
- [tyvj2054] 四叶草魔杖 (最小生成树 状压dp)
传送门 Background 陶醉在彩虹光芒笼罩的美景之中,探险队员们不知不觉已经穿过了七色虹,到达了目的地,面前出现了一座城堡和小溪田园,城堡前的木牌上写着"Poetic Island&q ...
- POJ 1038 Bugs Integrated Inc (复杂的状压DP)
\(POJ~1038~~*Bugs~Integrated~Inc:\) (复杂的状压DP) \(solution:\) 很纠结的一道题目,写了大半天,就想练练手,结果这手生的.其实根据之前那道炮兵阵地 ...
- codeforces 8C. Looking for Order 状压dp
题目链接 给n个物品的坐标, 和一个包裹的位置, 包裹不能移动. 每次最多可以拿两个物品, 然后将它们放到包里, 求将所有物品放到包里所需走的最小路程. 直接状压dp就好了. #include < ...
- UVA10296 Jogging Trails(中国邮递员问题)(欧拉回路、一般图最大权匹配 / 状压DP)
整理的算法模板合集: ACM模板 目录 思路 UVA10296 Jogging Trails 题目翻译: 给你n个点,m条无向边,每条边有一定的距离数值,构造成一个连通图.问从任意一点出发,遍历所有的 ...
- POJ 2411 Mondriaan‘s Dream(最清楚好懂的状压DP讲解)(连通性状态压缩DP)
poj 2411 Mondriaan's Dream(最清晰的状压DP解析) 闫氏DP大法好 我们这里是一列一列地来,因为是一个棋盘性的状态压缩DP,从哪个方向都一样 摆放的小方格总方案数 等价于 横 ...
- 【每日DP】day2、P1879 [USACO06NOV]Corn Fields G玉米地(状压DP模板题)难度⭐⭐⭐★
昨天的每日DP我还在写01背包,今天就到状压DP了,真刺激. P1879 [USACO06NOV]Corn Fields G 题目链接 输入 2 3 1 1 1 0 1 0 输出 9 一道简单的状压D ...
- hdu 4778 Gems Fight! 状压dp
转自wdd :http://blog.csdn.net/u010535824/article/details/38540835 题目链接:hdu 4778 状压DP 用DP[i]表示从i状态选到结束得 ...
最新文章
- 检查Lync SRV记录是否正常
- 轻松实现远程批量拷贝文件脚本(女学生作品)
- Mysql:增加用户和密码,赋予权限
- 微软Azure storage account的connection string
- 从零开始学视觉Transformer (11):目标检测DETR-2
- 第8章6节MonkeyRunner启动运行过程-启动Monkey 2
- c# 中对于每次修改的程序 都必须重新手动生成 才能编译的问题
- pytorch 实现 LSTM AutoEncoder 与案例
- 车贷P2P平台设计市场需求文档(MRD)
- Java语言基础(4)
- 做梦都没想到,就这样得到了一位大佬的青睐
- 《路由器开发 - 路由器刷机指南》联想Newifi Y1刷机
- 解决ie浏览器兼容ES6语法问题
- Win10系统截图新工具的快捷键
- ABP中的数据过滤器
- 计算机死机后 通过任务管理器关闭程序,电脑死机后,按哪个键结束程序
- [JS jQuery项目]仿网易云音乐项目问题摘要
- AOSP 源代码标记和 build
- Sapphire应用场景剖析 | 基于行业首个隐私EVM构建DApp
- 计算机游戏155,MAME0.155经典1430款游戏合集
热门文章
- linux强大功能,linux grep和find 的强大功能
- 5120v2怎么配置web登陆_阿里企业邮箱如何配置和添加到第三个电子邮件客户端中?...
- android+百度lbs云,百度——LBS.云 v2.0——云存储扩展字段——Android
- eclipse 输入卡顿_7个小技巧,解决eclipse卡顿问题
- 用python实现流程自动化_Python自动化开发 - 流程控制
- 机器学习之超参数调优——超参数调优的方法
- 软件构造学习笔记-第四周
- 高等数学下-赵立军-北京大学出版社-题解-练习8.4
- C语言 ---文件读取
- java蝇量模式_Head First设计模式——蝇量和解释器模式