题意 给 了 一 个 矩 阵 然 后 , 潜 艇 可 以 向 前 在 西北和东北之间 的区域, 然后每个潜艇有一个值D ,当到达潜艇距离为D的倍数的时候可以得到这个价值,这样我们1000*1000 的矩阵,D<=1000, dp这么多显然是不可以的,那么对于大于sqrt(n); 直接暴力, 对于小于sqrt(n) 的进行dp

dp[i][j][k]=dp[i-k][j-k][k]+dp[i-k][j+k][k]-dp[i-k-k][j][k]+num[i-k][j+k-1]-num[i-k][j-k]

j-k

不存在时 dp[i][j][k]=dp[i-k][j+k][k]+num[i-k][j+k-1]-num[i-k][0]+num[i-k-k][j+k-1]-num[i-k-k][0];

j+k

不存在时 dp[i][j][k]=dp[i-k][j-k][k]+num[i-k][M]-num[i-k][j-k]+num[i-k-k][M]-num[i-k-k][j];

两个都不存在时,我们就定义dp[i][j][k]=dp[i-k][M][k]+num[i-k][M-1]+num[i-k][0]+num[i-k-k][M-K-1]-num[i-k-k][0]

#include <iostream>
#include <cstdio>
#include <algorithm>
#include <vector>
#include <string.h>
#include <cmath>
using namespace std;
const int maxn= ;
int N,M,Q;
int dp[maxn][maxn][];
char str[maxn][maxn];
int num[maxn][maxn];
int X[maxn*],Y[maxn*],D[maxn*];
int solve(int x, int y, int d){
if(d==){
return num[x][y]-num[x][y-];
}
int L=y,R=y;
int ans=;
while(x>){
ans+= num[x][R]-num[x][L-];
x -= d;
L=max( , L - d );
R=min( R + d ,M );
}
return ans;
}
int main()
{
while(scanf("%d%d%d",&N,&M,&Q)==){
for(int i=; i<=N; ++i){
scanf("%s",str[i]+);
num[i][]=;
for(int j=; j<=M; ++j)
if(str[i][j]=='X')
num[i][j]=num[i][j-]+;
else num[i][j]=num[i][j-];
}
int maxD=;
for(int i=; i<Q; ++i ){
scanf("%d%d%d",&X[i],&Y[i],&D[i]);
maxD=max(maxD,D[i]);
}
maxD=min(double (maxD) ,sqrt(N+0.5) );
for(int i=; i<=N; ++i)
for(int j=; j<=M; ++j)
for(int k = ; k <= maxD; ++k){
dp[i][j][k]=str[i][j]=='X'?:;
if(i-k>){
if(j-k>&&j+k<=M){
dp[i][j][k]+=dp[i-k][j-k][k]+dp[i-k][j+k][k];
dp[i][j][k]+=num[i-k][j+k-]-num[i-k][j-k];
if(i-*k>)
dp[i][j][k]-=dp[i-*k][j][k];
}else if(j-k>){ dp[i][j][k]+=dp[i-k][j-k][k]+num[i-k][M]-num[i-k][j-k];
if(i-k-k>)
dp[i][j][k]+=num[i-k-k][M]-num[i-k-k][j];
}else if(j+k<=M){ dp[i][j][k]+=dp[i-k][j+k][k]+num[i-k][j+k-]-num[i-k][];
if(i-k-k>)
dp[i][j][k]+=num[i-k-k][j-]-num[i-k-k][];
}else{
dp[i][j][k]+=dp[i-k][M][k]+num[i-k][M-]-num[i-k][];
if(M-k>&&i-k-k>)
dp[i][j][k]+=num[i-k-k][M-k-]-num[i-k-k][];
}
}
}
for(int i=; i<Q; ++i){
if(D[i]<=maxD)printf("%d\n",dp[X[i]][Y[i]][D[i]]);
else printf("%d\n",solve(X[i],Y[i],D[i]));
} }
return ;
}

hdu5110 dp的更多相关文章

  1. BZOJ 1911: [Apio2010]特别行动队 [斜率优化DP]

    1911: [Apio2010]特别行动队 Time Limit: 4 Sec  Memory Limit: 64 MBSubmit: 4142  Solved: 1964[Submit][Statu ...

  2. 2013 Asia Changsha Regional Contest---Josephina and RPG(DP)

    题目链接 http://acm.hdu.edu.cn/showproblem.php?pid=4800 Problem Description A role-playing game (RPG and ...

  3. AEAI DP V3.7.0 发布,开源综合应用开发平台

    1  升级说明 AEAI DP 3.7版本是AEAI DP一个里程碑版本,基于JDK1.7开发,在本版本中新增支持Rest服务开发机制(默认支持WebService服务开发机制),且支持WS服务.RS ...

  4. AEAI DP V3.6.0 升级说明,开源综合应用开发平台

    AEAI DP综合应用开发平台是一款扩展开发工具,专门用于开发MIS类的Java Web应用,本次发版的AEAI DP_v3.6.0版本为AEAI DP _v3.5.0版本的升级版本,该产品现已开源并 ...

  5. BZOJ 1597: [Usaco2008 Mar]土地购买 [斜率优化DP]

    1597: [Usaco2008 Mar]土地购买 Time Limit: 10 Sec  Memory Limit: 162 MBSubmit: 4026  Solved: 1473[Submit] ...

  6. [斜率优化DP]【学习笔记】【更新中】

    参考资料: 1.元旦集训的课件已经很好了 http://files.cnblogs.com/files/candy99/dp.pdf 2.http://www.cnblogs.com/MashiroS ...

  7. BZOJ 1010: [HNOI2008]玩具装箱toy [DP 斜率优化]

    1010: [HNOI2008]玩具装箱toy Time Limit: 1 Sec  Memory Limit: 162 MBSubmit: 9812  Solved: 3978[Submit][St ...

  8. px、dp和sp,这些单位有什么区别?

    DP 这个是最常用但也最难理解的尺寸单位.它与“像素密度”密切相关,所以 首先我们解释一下什么是像素密度.假设有一部手机,屏幕的物理尺寸为1.5英寸x2英寸,屏幕分辨率为240x320,则我们可以计算 ...

  9. android px转换为dip/dp

    /** * 根据手机的分辨率从 dp 的单位 转成为 px(像素) */ public int dipTopx(Context context, float dpValue) { final floa ...

随机推荐

  1. 【RF库Collections测试】Copy Dictionary

    Name: Copy DictionarySource:Collections <test library>Arguments:[ dictionary ]Returns a copy o ...

  2. Spring学习笔记--初始化和销毁Bean

    可以使用bean的init-method和destroy-method属性来初始化和销毁bean.定义一个Hero类: package com.moonlit.myspring; public cla ...

  3. Eclipse版GoogleI/O2014开源项目

    https://github.com/google/iosched谷歌原版是Gradle工程,用Eclipse开发的导入不了,所以搞了一个Elicpse工程,依赖的jar.库比较多,也比较难找... ...

  4. java基础---->多线程之interrupt(九)

    这里我们通过实例来学习一下java多线程中关于interrupt方法的一些知识.执者失之.我想当一个诗人的时候,我就失去了诗,我想当一个人的时候,我就失去了我自己.在你什么也不想要的时候,一切如期而来 ...

  5. Centos7 安装zabbix3.0 服务端 详细

    参考: https://www.cnblogs.com/37yan/p/6879218.html http://blog.csdn.net/hao134838/article/details/5712 ...

  6. 安装Hadoop系列 — 安装SSH免密码登录

    配置ssh免密码登录   1) 验证是否安装ssh:ssh -version显示如下的话则成功安装了OpenSSH_6.2p2 Ubuntu-6ubuntu0.1, OpenSSL 1.0.1e 11 ...

  7. Thrift 入门之helloWorld

    不多说,先看项目结构 首先先编写一个hello.thrift的文件 hello.thrift namespace java sawshaw service HelloService { string ...

  8. redis安装(linux平台)

    1.安装依赖项 yum install tcl -y 2.下载redis包并安装 wget http://download.redis.io/releases/redis-2.8.17.tar.gz ...

  9. jquery收集表单数组及去掉字符串最后的逗号!

    jquery收集表单数组: <input type='text' name='one[]' value='' /><br> <input type='text' name ...

  10. 阅读笔记:A Few useful things to Know About machine Learning

    这是Machine Learning领域的经典论文,文中提到了ML相关的12个keys,并自称这些keys是“black art”,我觉得有点像ML的“最佳实践”. 网上有此文的中文翻译,写得很详细, ...