暴力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 收集水晶的更多相关文章

  1. FZU 2092 收集水晶(记忆化搜索)

    Problem 2092 收集水晶 Accept: 101 Submit: 439 Time Limit: 5000 mSec Memory Limit : 32768 KB Problem Desc ...

  2. FZU 2092 收集水晶 bfs+记忆化搜索 or 暴力

    题目链接:收集水晶 一眼看过去,觉得是普通的bfs,初始位置有两个.仔细想了想...好像如果这样的话..........[不知道怎么说...T_T] dp[12][12][12][12][210] 中 ...

  3. FZU 2092 收集水晶 dp+bfs

    定义dp[t][x1][y1][x2][y2]为在t时刻,人走到x1,y1,影子走到x2,y2所获得最大价值 最终就是所有的dp[max][..][..][..][..]的最大值 然后递推也很自然,枚 ...

  4. FZU 2092 bfs+记忆化搜索

    晚上团队训练赛的题 和普通bfs不同的是 这是同时操纵人与影子两个单位进行的bfs 由于可能发生人和影子同时接触水晶 所以不可以分开操作 当时使用node记录人和影子的位置 然后进行两重for循环来分 ...

  5. WinForm GDI+ 资料收集

    UI(User Interface)编程在整个项目开发过程中是个颇为重要的环节,任何好的解决方案若没有良好的用户界面呈现给最终用户,那么就算包含了最先进的技术也不能算是好程序.UI编程体现在两个方面, ...

  6. 水晶报表(web)表格信息展示

    一.环境安装 开发工具使用VS2010+SAP Crystal Reports13_0+.NETformwork4.0 因为vs2010已经不再集成水晶报表,所以需要我们去找合适的版本下载http:/ ...

  7. YYS FZU - 2278 (期望)JAVA

    题目链接: G - YYS FZU - 2278 题目大意: 我们现在想要收集到n个卡片,现在已知抽到每种卡片的概率为1/n,现在每隔(n-1)!天就可以进行一次抽奖,问收集齐所有卡片的期望天数. 具 ...

  8. FZU Monthly-201903 tutorial

    FZU Monthly-201903 tutorial 题目(难度递增) easy easy-medium medium medium-hard hard 思维难度 ABF G CH D E A. D ...

  9. 1.8 收集的XSS Payload

    收集的XSS Payload ,可以做成字典,到时候批量测试:--------------------------------------------------------------------- ...

随机推荐

  1. POJ 2182/暴力/BIT/线段树

    POJ 2182 暴力 /* 题意: 一个带有权值[1,n]的序列,给出每个数的前面比该数小的数的个数,当然比一个数前面比第一个数小的个数是0,省略不写,求真正的序列.(拗口) 首先想到的是从前到后暴 ...

  2. [原]界面上有几个球队名字的列表,将鼠标放到球队名字上就变为红色背景,其他球队背景颜色为白色,点击一个球队的时候就将点击的球队变为fontSize=30字体(fontSize=‘’回到默认)。

    window.onload = function () {             var uls = document.getElementById('ui').getElementsByTagNa ...

  3. w3chtml页面和css书写规范

    http://www.cnblogs.com/Wenwang/archive/2011/09/07/2169881.html

  4. 转:jmeter实践

    本文主要介绍性能测试中的常用工具jmeter的使用方式,以方便开发人员在自测过程中就能自己动手对系统进行自动压测和模拟用户操作访问请求.最后还用linux下的压测工具ab做了简单对比. 1.      ...

  5. 转:Linux基本命令大全

    Linux基本命令大全   新手刚刚接触Linux的时候可能处处感到不便,不过没有关系,接触新的事物都有这样的一个过程,在你用过Linux一段时间后,你就会逐渐了解Linux其实和Windows一样容 ...

  6. java项目(java project)如何导入jar包的解决方案列表

    右键项目-properties-java build path(左侧菜单)-选择libraries 有两种方式,导入jar包实际上就是建立一种链接,并不是copy式的导入 一.导入外部包,add ex ...

  7. 关于DOMContentLoaded

    也许还有朋友不太清楚DOMContentLoaded这个事件.简单的说,这个事件就是要在大多数情况下去替代window.onload事件,因为window.onload事件必须要等待页面所有元素的资源 ...

  8. Bootstrap Modal 垂直居中

    Bootstrap 的 modal 正文中如果内容较少的话,并不会垂直居中,而是偏上, 如果想要达到垂直居中的效果,需要自动动手了. 可以在初始显示时设置垂直居中,可以这样做: $('#YourMod ...

  9. POJ 1821 单调队列+dp

    题目大意:有K个工人,有n个墙,现在要给墙涂色.然后每个工人坐在Si上,他能刷的最大范围是Li,且必须是一个连续子区间,而且必须过Si,他刷完后能获得Pi钱 思路:定义dp[i][j]表示前i个人,涂 ...

  10. zabbix agent自动安装脚本

    #!/bin/bash #desc: used for autoinstall zabbix client #说明:本脚本旨在批量安装zabbix_agent,在一个服务器上放好软件和配置文件,执行本 ...