博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
FZU 2092 收集水晶 dp+bfs
阅读量:5024 次
发布时间:2019-06-12

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

定义dp[t][x1][y1][x2][y2]为在t时刻,人走到x1,y1,影子走到x2,y2所获得最大价值

最终就是所有的dp[max][..][..][..][..]的最大值

然后递推也很自然,枚举人和影子的动向,唯一注意的是当走到一点时,只获得一次价值,要除以2

然后对于每一层时间,其实有效的很少,所以用bfs取有效点更新,这样可以减少一些时间复杂度,最终跑出来1593ms

#include 
#include
#include
#include
#include
#include
#include
#include
using namespace std;typedef long long LL;const int N=1e2+5;const int INF=0x3f3f3f3f;int dx[5]= { 0,0,0,-1,1};int dy[5]= { 0,-1,1,0,0};char s[15][15];int mp[202][11][11];int dp[202][11][11][11][11];bool vis[202][11][11][11][11];int n,m,p,mx;struct Node{ int t,x,y,k1,k2; Node() {} Node(int a,int b,int c,int d,int e) { t=a,x=b,y=c,k1=d,k2=e; }};queue
q;void bfs(){ memset(dp,-1,sizeof(dp)); memset(vis,0,sizeof(vis)); while(!q.empty())q.pop(); dp[0][1][1][1][1]=0; vis[0][1][1][1][1]=1; Node a,tmp; q.push(Node(0,1,1,1,1)); while(!q.empty()) { a=q.front(); q.pop(); if(a.t==mx)continue; tmp.t=a.t+1; int o=dp[a.t][a.x][a.y][a.k1][a.k2]; for(int i=0; i<5; ++i) for(int j=0; j<5; ++j) { tmp.x=a.x+dx[i],tmp.y=a.y+dy[i]; tmp.k1=a.k1+dx[j],tmp.k2=a.k2+dy[j]; if(tmp.x<1||tmp.x>n||tmp.y<1||tmp.y>m)continue; if(tmp.k1<1||tmp.k1>n||tmp.k2<1||tmp.k2>m)continue; if(s[tmp.x][tmp.y]=='#'||s[tmp.k1][tmp.k2]=='#')continue; int c=mp[tmp.t][tmp.x][tmp.y]+mp[tmp.t][tmp.k1][tmp.k2]; if(tmp.x==tmp.k1&&tmp.y==tmp.k2)c/=2; c+=o; if(c>dp[tmp.t][tmp.x][tmp.y][tmp.k1][tmp.k2]) { dp[tmp.t][tmp.x][tmp.y][tmp.k1][tmp.k2]=c; if(!vis[tmp.t][tmp.x][tmp.y][tmp.k1][tmp.k2]) { q.push(tmp); vis[tmp.t][tmp.x][tmp.y][tmp.k1][tmp.k2]=1; } } } }}int main(){ int T; scanf("%d",&T); while(T--) { mx=0; scanf("%d%d",&n,&m); for(int i=1; i<=n; ++i) scanf("%s",s[i]+1); memset(mp,0,sizeof(mp)); scanf("%d",&p); for(int i=0; i
View Code

 

转载于:https://www.cnblogs.com/shuguangzw/p/5388947.html

你可能感兴趣的文章
程序员高效开发的几个技巧
查看>>
js-权威指南学习笔记19.2
查看>>
hexo 搭建博客
查看>>
关于 UIWebView 几个高级用法
查看>>
maven创建的项目中无法创建src/main/java 解决方案
查看>>
华为软件开发云测评报告二:代码检查
查看>>
集合1
查看>>
js 原生 ajax
查看>>
关键词 virtual
查看>>
建造者模式(屌丝专用)
查看>>
UVALive 4730 Kingdom +段树和支票托收
查看>>
[APIO2010]特别行动队
查看>>
[SCOI2016]幸运数字
查看>>
SpringBoot 集成ehcache
查看>>
初步swift语言学习笔记2(可选类型?和隐式可选类型!)
查看>>
Nginx + Tomcat 反向代理 如何在高效的在一台服务器部署多个站点
查看>>
在Vs2012 中使用SQL Server 2012 Express LocalDB打开Sqlserver2012数据库
查看>>
在Macos下完美解决Adobe Dreamweaver CC 2018 汉化及操作方法
查看>>
【转】 Newtonsoft.Json高级用法
查看>>
CodeBlocks X64 SVN 编译版
查看>>