hdu5110 dp
题意 给 了 一 个 矩 阵 然 后 , 潜 艇 可 以 向 前 在 西北和东北之间 的区域, 然后每个潜艇有一个值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的更多相关文章
- BZOJ 1911: [Apio2010]特别行动队 [斜率优化DP]
1911: [Apio2010]特别行动队 Time Limit: 4 Sec Memory Limit: 64 MBSubmit: 4142 Solved: 1964[Submit][Statu ...
- 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 ...
- AEAI DP V3.7.0 发布,开源综合应用开发平台
1 升级说明 AEAI DP 3.7版本是AEAI DP一个里程碑版本,基于JDK1.7开发,在本版本中新增支持Rest服务开发机制(默认支持WebService服务开发机制),且支持WS服务.RS ...
- AEAI DP V3.6.0 升级说明,开源综合应用开发平台
AEAI DP综合应用开发平台是一款扩展开发工具,专门用于开发MIS类的Java Web应用,本次发版的AEAI DP_v3.6.0版本为AEAI DP _v3.5.0版本的升级版本,该产品现已开源并 ...
- BZOJ 1597: [Usaco2008 Mar]土地购买 [斜率优化DP]
1597: [Usaco2008 Mar]土地购买 Time Limit: 10 Sec Memory Limit: 162 MBSubmit: 4026 Solved: 1473[Submit] ...
- [斜率优化DP]【学习笔记】【更新中】
参考资料: 1.元旦集训的课件已经很好了 http://files.cnblogs.com/files/candy99/dp.pdf 2.http://www.cnblogs.com/MashiroS ...
- BZOJ 1010: [HNOI2008]玩具装箱toy [DP 斜率优化]
1010: [HNOI2008]玩具装箱toy Time Limit: 1 Sec Memory Limit: 162 MBSubmit: 9812 Solved: 3978[Submit][St ...
- px、dp和sp,这些单位有什么区别?
DP 这个是最常用但也最难理解的尺寸单位.它与“像素密度”密切相关,所以 首先我们解释一下什么是像素密度.假设有一部手机,屏幕的物理尺寸为1.5英寸x2英寸,屏幕分辨率为240x320,则我们可以计算 ...
- android px转换为dip/dp
/** * 根据手机的分辨率从 dp 的单位 转成为 px(像素) */ public int dipTopx(Context context, float dpValue) { final floa ...
随机推荐
- 【RF库Collections测试】Copy Dictionary
Name: Copy DictionarySource:Collections <test library>Arguments:[ dictionary ]Returns a copy o ...
- Spring学习笔记--初始化和销毁Bean
可以使用bean的init-method和destroy-method属性来初始化和销毁bean.定义一个Hero类: package com.moonlit.myspring; public cla ...
- Eclipse版GoogleI/O2014开源项目
https://github.com/google/iosched谷歌原版是Gradle工程,用Eclipse开发的导入不了,所以搞了一个Elicpse工程,依赖的jar.库比较多,也比较难找... ...
- java基础---->多线程之interrupt(九)
这里我们通过实例来学习一下java多线程中关于interrupt方法的一些知识.执者失之.我想当一个诗人的时候,我就失去了诗,我想当一个人的时候,我就失去了我自己.在你什么也不想要的时候,一切如期而来 ...
- Centos7 安装zabbix3.0 服务端 详细
参考: https://www.cnblogs.com/37yan/p/6879218.html http://blog.csdn.net/hao134838/article/details/5712 ...
- 安装Hadoop系列 — 安装SSH免密码登录
配置ssh免密码登录 1) 验证是否安装ssh:ssh -version显示如下的话则成功安装了OpenSSH_6.2p2 Ubuntu-6ubuntu0.1, OpenSSL 1.0.1e 11 ...
- Thrift 入门之helloWorld
不多说,先看项目结构 首先先编写一个hello.thrift的文件 hello.thrift namespace java sawshaw service HelloService { string ...
- redis安装(linux平台)
1.安装依赖项 yum install tcl -y 2.下载redis包并安装 wget http://download.redis.io/releases/redis-2.8.17.tar.gz ...
- jquery收集表单数组及去掉字符串最后的逗号!
jquery收集表单数组: <input type='text' name='one[]' value='' /><br> <input type='text' name ...
- 阅读笔记:A Few useful things to Know About machine Learning
这是Machine Learning领域的经典论文,文中提到了ML相关的12个keys,并自称这些keys是“black art”,我觉得有点像ML的“最佳实践”. 网上有此文的中文翻译,写得很详细, ...