【状压DP】剑之修炼(jzoj 2130)

剑之修炼

jzoj 2130

题目大意:

在一个位置上有一个人,同时还有NNNN⩽10N \leqslant 10N10)个怪物,这个人会不停地释放技能,技能可以瞬间杀死周围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 305S30
N⩽10N \leqslant 10N10

解题思路:

用状压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;
}

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/320558.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

GYM 101908F - Music Festival

GYM 101908F - Music Festival 做法&#xff1a;将节目按照右端点排序&#xff0c;\(dp[i][st][0/1]\)表示前i个节目&#xff0c;选择的stage的状态用一个n位二进制数表示为st&#xff0c;第i个节目选或不选的最大值&#xff0c;转移时用线段树优化一下。 #include <bits/st…

CodeForces - 1189A ----Keanu Reeves

原题传送 INPUT Output Examples 题意&#xff1a; 有个长度我n的字符串&#xff0c;然后把它分成k分&#xff0c;要使每份都good且为正数&#xff08;good的要求为该数中0和1的个数不同&#xff09;&#xff0c;求输出最小的结果&#xff08;答案不唯一输出一个即可&#xf…

P5072-[Ynoi2015]盼君勿忘【莫队,根号分治】

正题 题目链接:https://www.luogu.com.cn/problem/P5072 题目大意 nnn个数&#xff0c;mmm个询问(l,r,p)(l,r,p)(l,r,p)表示询问[l,r][l,r][l,r]的所有子序列的和模ppp。 解题思路 一个出现了kkk次的数会产生贡献2r−l1−2r−l1−k2^{r-l1}-2^{r-l1-k}2r−l1−2r−l1−k次贡献…

WebApiClient的接口输入验证

1. 文章目的随着WebApiClient的不断完善&#xff0c;越来越多开发者选择WebApiClient替换原生的HttpClient&#xff0c;本文将介绍WebApiClient的接口参数输入有效性验证的新特性。2.DataAnnotations介绍在asp.net mvc服务端编程中&#xff0c;我们在创建模型的时候&#xff0c…

【二分】【SPFA】架设电话线(jzoj 2132)

架设电话线 jzoj 2132 题目大意&#xff1a; 给你一个图&#xff0c;让你从1走到n&#xff0c;问如果可以使k条路的代价变为0&#xff08;自选&#xff09;&#xff0c;那途中走的路的最大值最小是多少 样例输入 5 7 1 1 2 5 3 1 4 2 4 8 3 2 3 5 2 9 3 4 7 4 5 6输入说明…

HDU5528 - Count a * b

HDU5528 - Count a * b 做法&#xff1a;求\(\sum_{m|n}(m^2 - \sum_{i1}^{m}\sum_{j1}^m [m|(ij)])\) \(h(m) \sum_{i1}^{m}\sum_{j1}^m [m|(ij)] \sum_{i1}^m\sum_{j1}^m [\frac{m}{(i,m)}|\frac{i}{(i,m)}j]\) $ \sum_{i1}^m\sum_{j1}^m [\frac{m}{(i,m)}|j] \sum_{i1}^…

CodeForces - 1189B Number Circle

原题传送器<----点我 **题意&#xff1a;**n个数字&#xff0c;请你给它们排个序围成一个环&#xff0c;满足任意一个数两边的数之和大于它本身&#xff0c;例如题目给的图&#xff08;左图为正确答案&#xff09;&#xff0c;如果不存在这样的环就输出NO。 难度★ 题解 …

P7044-[MCOI-03]括号【组合数学】

正题 题目链接:https://www.luogu.com.cn/problem/P7044?contestId36089 题目大意 一个括号序列&#xff0c;0级偏值定义为其中不合法的括号数量。 kkk级偏值定义为它所有子串的k−1k-1k−1级偏值的和。 求这个括号序列的kkk级偏值。 解题思路 后文中我们定义G(x,y)Cxy−1y…

在 .NET Core 应用中使用 NHibernate

NHibernate 最近发布了 5.1.3 版本&#xff0c; 支持 .NET Standard 2.0 &#xff0c; 这意味着可以在 .NET Core 2.0 应用中使用&#xff0c; 本文就已 WebAPI 应用为例&#xff0c; 介绍一下如何在 .NET Core 应用中如何使用 NHibernate 。1、 新建一个基于 .NET Core 的 We…

牛客网【每日一题】3月25日 tokitsukaze and Soldier

牛客网【每日一题】3月25题号&#xff1a;NC50439 名称&#xff1a; tokitsukaze and Soldier 来源&#xff1a;练习赛50-C 链接: link. 来源&#xff1a;牛客网 时间限制&#xff1a;C/C 1秒&#xff0c;其他语言2秒 空间限制&#xff1a;C/C 524288K&#xff0c;其他语言10…

GYM101002C - Greetings!

GYM101002C - Greetings! 做法&#xff1a;\(dp[i][S]\)表示用了\(i\)种信封&#xff0c;明信片的状态为\(S\)时的最小花费&#xff0c;预处理\(A[S]\)表示可以装的对应明信片的集合的花费, \(dp[i][s] min(dp[i-1][s-s2] A[s2]), s2 \in s\)。注意枚举所有子集&#xff0c;再…

P7045-[MCOI-03]金牌【构造,交互题】

正题 题目链接:https://www.luogu.com.cn/problem/P7045?contestId36089 题目大意 nnn个物品有一些颜色&#xff0c;可以询问QQQ次两个物品的颜色是否相同&#xff0c;求一个排列是的相邻的物品颜色不同。其中Q≥2n−2Q\geq 2n-2Q≥2n−2 解题思路 对于每一个不在头尾的物品…

【数学】礼物(jzoj 2129)

礼物 jzoj 2129 题目大意 有1……n,n个礼物盒&#xff0c;第i个礼物盒有i个礼物&#xff0c;现在让你选2个礼物盒&#xff0c;使他是k的倍数 输入样例 1 1 3 2 5 2 50 50 0 0输出样例 0 1 4 24数据范围 20%的数据N<100; 80%的数据K<1000; 每个输入文件最多有200行…

微信小程序与AspNetCore SignalR聊天实例

微信小程序与aspnetcore signalr实例本文不对小程序与signalr做任何介绍,默认读者已经掌握aspnetcore Signalr文档小程序文档写在之前SignalR没有提供小程序使用的客户端js,所以本人参考signlar.js写了小程序版signalr-client.js 代码开源&#xff0c;地址 https://github.com/…

二次重建基本完成辣!

二次重建基本完成辣&#xff01; 实现了一些&#xff0c;之前觉得很有意思的设想&#xff0c;参考了许多dalao的blog解决了手机端突然出现的无法点击链接的问题但是在由于css实现过程中&#xff0c;本人姿势水平不够&#xff0c;Pad和手机无法正常显示。。。适配调整工程过于庞…

纪中C组模拟赛总结(2019.7.12)

成绩&#xff1a; rankrankrank是有算其他dalaodalaodalao的 rankrankranknamenamenamescorescorescoreT1T1T1T2T2T2T3T3T3T4T4T4444tjhtjhtjh127.7127.7127.72020200001001001007.77.77.7555lthlthlth120120120202020000100100100000888lyflyflyf107.7107.7107.70000001001001…

牛客网【每日一题】3月26日 合并回文子串

题号&#xff1a;NC13230 名称&#xff1a;合并回文子串 来源&#xff1a;美团2017年CodeM大赛-初赛A轮 题目链接 时间限制&#xff1a;C/C 2秒&#xff0c;其他语言4秒 空间限制&#xff1a;C/C 262144K&#xff0c;其他语言524288K 64bit IO Format: %lld 题目描述 输入两个字…

jzoj5363-[NOIP2017提高A组模拟9.14]生命之树【启发式合并,Trie】

正题 题目大意 nnn个点的一棵树&#xff0c;每个节点有一个值valvalval和一个字符串SSS。对于每个点求∑x∈decp∑y∈decp(x<y)(valxxorvaly)∗∣LCP(Sx,Sy)∣\sum_{x\in dec_p}\sum_{y\in dec_p(x<y)}(val_x\ xor\ val_y)*|LCP(S_x,S_y)|x∈decp​∑​y∈decp​(x<y)…

技术绩效考量:你们可能都做错了

欢迎来到通向卓越之路&#xff01;我们或许都陷入了这样的困境&#xff0c;我们努力成为卓越的企业&#xff0c;我们进行绩效考量&#xff0c;并在此过程中找到正确的OKR、KPI或ABC。但这可能是一件很困难的事情&#xff0c;特别是当我们所在的组织非常复杂并从技术幽灵&#x…

UVALive 8518 - Sum of xor sum

UVALive 8518 - Sum of xor sum 做法&#xff1a;线段树维护&#xff1a;答案&#xff0c;边界在左端点的区间异或为1的个数&#xff0c;边界在右端点异或为1的个数&#xff0c;1的个数&#xff0c;区间长度&#xff0c;这样已经自洽了。&#xff08;每次讲线段树&#xff0c;都…