FZU 2092 收集水晶
暴力DP。
dp[x1][y1][x2][y2][t]表示,第一个人在(X1,Y1),第二个人在(X2,Y2),时间为t的时候获得的最大价值。
时间复杂度o(t*n*m*n*m*5*5).
什么都不优化跑了4600ms,差点超时,剪了点枝,2500ms跑过。
空间复杂度是可以优化的,dp[x1][y1][x2][y2][t]只与t-1时刻的有关,所以dp数组最后一维可以开成2,用滚动数组做。
#include<cstdio>
#include<cstring>
#include<cmath>
#include<vector>
#include<algorithm>
using namespace std; int dp[][][][][];
char s[][];
int val[][][];
int n,m,p;
int dir[][];
int top; void init()
{
top=;
dir[][]=;dir[][]=;
dir[][]=;dir[][]=;
dir[][]=;dir[][]=-;
dir[][]=;dir[][]=;
dir[][]=-;dir[][]=; memset(dp,-,sizeof dp);
memset(val,,sizeof val);
} bool P(int a,int b)
{
if(a>=&&a<n&&b>=&&b<m) return ;
return ;
} void read()
{
scanf("%d%d",&n,&m);
for(int i=;i<n;i++) scanf("%s",s[i]);
scanf("%d",&p);
for(int i=;i<p;i++)
{
int t,x,y,v;
scanf("%d%d%d%d",&t,&x,&y,&v);
x--;y--;
val[x][y][t]=val[x][y][t]+v;
top=max(top,t);
}
} void work()
{
int ans=;
dp[][][][][]=;
for(int t=;t<=top;t++)
{
for(int x1=;x1<n;x1++)
{
for(int y1=;y1<m;y1++)
{
if(s[x1][y1]!='.') continue;
for(int x2=;x2<n;x2++)
{
for(int y2=;y2<m;y2++)
{
if(s[x2][y2]!='.') continue;
for(int d1=;d1<;d1++)
{
int new_x1=x1+dir[d1][];
int new_y1=y1+dir[d1][]; if(P(new_x1,new_y1)==) continue;
if(s[new_x1][new_y1]!='.') continue; for(int d2=;d2<;d2++)
{
int new_x2=x2+dir[d2][];
int new_y2=y2+dir[d2][]; if(P(new_x2,new_y2)==) continue;
if(s[new_x2][new_y2]!='.') continue; if(dp[new_x1][new_y1][new_x2][new_y2][t-]==-) continue; int sum=;
sum=dp[new_x1][new_y1][new_x2][new_y2][t-];
if(x1==x2&&y1==y2) sum=sum+val[x1][y1][t];
else sum=sum+val[x1][y1][t]+val[x2][y2][t]; dp[x1][y1][x2][y2][t]=max(dp[x1][y1][x2][y2][t],sum);
ans=max(ans,dp[x1][y1][x2][y2][t]);
}
}
}
}
}
}
}
printf("%d\n",ans);
} int main()
{
int T;
scanf("%d",&T);
while(T--)
{
init();
read();
work();
}
return ;
}
FZU 2092 收集水晶的更多相关文章
- FZU 2092 收集水晶(记忆化搜索)
Problem 2092 收集水晶 Accept: 101 Submit: 439 Time Limit: 5000 mSec Memory Limit : 32768 KB Problem Desc ...
- FZU 2092 收集水晶 bfs+记忆化搜索 or 暴力
题目链接:收集水晶 一眼看过去,觉得是普通的bfs,初始位置有两个.仔细想了想...好像如果这样的话..........[不知道怎么说...T_T] dp[12][12][12][12][210] 中 ...
- FZU 2092 收集水晶 dp+bfs
定义dp[t][x1][y1][x2][y2]为在t时刻,人走到x1,y1,影子走到x2,y2所获得最大价值 最终就是所有的dp[max][..][..][..][..]的最大值 然后递推也很自然,枚 ...
- FZU 2092 bfs+记忆化搜索
晚上团队训练赛的题 和普通bfs不同的是 这是同时操纵人与影子两个单位进行的bfs 由于可能发生人和影子同时接触水晶 所以不可以分开操作 当时使用node记录人和影子的位置 然后进行两重for循环来分 ...
- WinForm GDI+ 资料收集
UI(User Interface)编程在整个项目开发过程中是个颇为重要的环节,任何好的解决方案若没有良好的用户界面呈现给最终用户,那么就算包含了最先进的技术也不能算是好程序.UI编程体现在两个方面, ...
- 水晶报表(web)表格信息展示
一.环境安装 开发工具使用VS2010+SAP Crystal Reports13_0+.NETformwork4.0 因为vs2010已经不再集成水晶报表,所以需要我们去找合适的版本下载http:/ ...
- YYS FZU - 2278 (期望)JAVA
题目链接: G - YYS FZU - 2278 题目大意: 我们现在想要收集到n个卡片,现在已知抽到每种卡片的概率为1/n,现在每隔(n-1)!天就可以进行一次抽奖,问收集齐所有卡片的期望天数. 具 ...
- FZU Monthly-201903 tutorial
FZU Monthly-201903 tutorial 题目(难度递增) easy easy-medium medium medium-hard hard 思维难度 ABF G CH D E A. D ...
- 1.8 收集的XSS Payload
收集的XSS Payload ,可以做成字典,到时候批量测试:--------------------------------------------------------------------- ...
随机推荐
- C++虚函数的新用法
1.今天在segmentfault上看到了一个C++虚函数的新用法,先上代码 #include <iostream> using namespace std; class B { publ ...
- hibernate缓存机制(二级缓存)
一.why(为什么要用Hibernate缓存?) Hibernate是一个持久层框架,经常访问物理数据库. 为了降低应用程序对物理数据源访问的频次,从而提高应用程序的运行性能. 缓存内的数据是对物理数 ...
- Hadoop RPC机制
RPC(Remote Procedure Call Protocol)远程过程调用协议,它是一种通过网络从远程计算机程序上请求服务,而不需要了解底层网络技术的协议.Hadoop底层的交互都是通过 rp ...
- 如何给grldr.mbr和grldr改名
grldr修改方法: 比如要把grldr 改成gzldr :1.先把文件名改成gzldr:2.用ultraedit或winhex打开gzldr:3.虽然文本框全都是乱码,别管它,把光标定位在右边文本框 ...
- 快学Scala-第二章 控制结构和函数
知识点: 1.条件表达式 if(x>0) 1 else 0 scala每个表达式都有一个类型,如果一致则为它们的类型,如果为混合类型表达式,则为它们的公共超类型Any. if(x>0) 1 ...
- MySql数据库基本介绍和基本语法
一.数据库简单介绍 1. 按照数据库的发展时间顺序,主要出现了以下类型数据库系统: Ø 网状型数据库 Ø 层次型数据库 Ø 关系型数据库 Ø 面向对象数据库 上面4中数据库系统中,关系型数据库使用最为 ...
- POJ 1061 青蛙的约会(欧几里得扩展)
题意:已知青蛙1位置x,速度m,青蛙2位置y,速度n,纬线长度为l,求他们相遇时最少跳跃次数. 思路:设最小跳跃次数为k,则(x + k*m) - (y + k*n) = q*l:经过整理得到k*(n ...
- android--listview设置高度
android:layout_height="25dp"这么设置根本就没有用. 我们必须要设置android:minHeight="25dp"这样才行.
- PHP无限极分类的几种方法
导读:项目开发,经常栏目要做到无限极分类,几种方法PHP无限极分类的几种方法 复制代码 代码如下:namespace Util;class Category{static public functio ...
- hrbust 1721 A + B = 0 map的应用
13级春季校赛的热身题,但优化后我的代码也超时了,后来看了看学长的解法,觉得最简单的还是map,再一次感受到了map的强大. 题目描述如下 Description There is an intege ...